@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
/**
 * Applies or overrides default styles of the HTML elements for a more predictable
 * and convenient behavior in different browsers.
 */
/**
 * Sets font and basic typography styles for the main HTML elements.
 */
/**
 * Provides global class names for the custom responsive grid system with flexible columns
 * and configurable columns count, container with maximum content width
 * and modifiers for alignment.
 * Grid system parameters can be customized in grid settings file.
 */
/**
 * Implements simple animations.
 */
/* stylelint-disable */
/* stylelint-disable */
/* stylelint-disable */
/* stylelint-disable selector-class-pattern,declaration-no-important */
* {
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  margin: 0;
  padding: 0;
  border: 0;
  font: inherit;
  color: inherit;
  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
}
*:hover, *:active, *:focus {
  outline: 0;
}
*::before, *::after {
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  color: inherit;
}

html,
body {
  height: 100%;
}

body {
  overflow-x: hidden;
  /* Prevent Webkit and Windows Mobile platforms from changing default font sizes, while not breaking desktop design. */
  -webkit-text-size-adjust: 100%;
  -ms-text-size-adjust: 100%;
}

html {
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  margin: 0;
  padding: 0;
  border: 0;
  font: inherit;
  color: inherit;
  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
  scroll-behavior: smooth;
}

article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section,
form {
  display: block;
}

ul {
  list-style: none;
}

blockquote,
q {
  quotes: none;
}
blockquote::before, blockquote::after,
q::before,
q::after {
  content: none;
}

table {
  border-collapse: collapse;
  border-spacing: 0;
}

img {
  max-width: 100%;
  max-height: 100%;
}

.custom-element {
  display: block;
}

@font-face {
  font-family: "Lato";
  font-style: normal;
  font-weight: 300;
  src: url("/assets/current/default/fonts/Lato-Light.woff");
  src: local("Lato Light"), local("Lato-Light"), url("/assets/current/default/fonts/Lato-Light.woff2") format("woff2"), url("/assets/current/default/fonts/Lato-Light.woff") format("woff"), url("/assets/current/default/fonts/Lato-Light.ttf") format("truetype");
}
@font-face {
  font-family: "Lato";
  font-style: normal;
  font-weight: 700;
  src: url("/assets/current/default/fonts/Lato-Bold.woff");
  src: local("Lato Bold"), local("Lato-Bold"), url("/assets/current/default/fonts/Lato-Bold.woff2") format("woff2"), url("/assets/current/default/fonts/Lato-Bold.woff") format("woff"), url("/assets/current/default/fonts/Lato-Bold.ttf") format("truetype");
}
@font-face {
  font-family: "Lato";
  font-style: normal;
  font-weight: 400;
  src: url("/assets/fonts/Lato-Regular.woff");
  src: local("Lato Regular"), local("Lato-Regular"), url("/assets/current/default/fonts/Lato-Regular.woff2") format("woff2"), url("/assets/current/default/fonts/Lato-Regular.woff") format("woff"), url("/assets/current/default/fonts/Lato-Regular.ttf") format("truetype");
}
html {
  font-size: 15px;
}

body {
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.5;
  position: relative;
  background-color: #fff;
  color: #4b4b4d;
  font-family: "Lato", sans-serif;
}

* {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

h1 {
  font-weight: 500;
  font-size: 2.4rem;
  line-height: 1.1;
  display: block;
  color: #4b4b4d;
}

h2 {
  font-weight: 500;
  font-size: 2rem;
  line-height: 1.2;
  display: block;
  color: #4b4b4d;
}

h3 {
  font-weight: 500;
  font-size: 1.4666666667rem;
  line-height: 1.4;
  display: block;
  color: #4b4b4d;
}

h4 {
  font-weight: 500;
  font-size: 1.2rem;
  line-height: 1.6;
  display: block;
  color: #4b4b4d;
}

h5 {
  font-weight: 500;
  font-size: 1rem;
  line-height: 1.8;
  display: block;
  color: #4b4b4d;
}

h6 {
  font-weight: 500;
  font-size: 0.9333333333rem;
  line-height: 1.9;
  display: block;
  color: #4b4b4d;
}

a {
  color: #4b4b4d;
  text-decoration: none;
  /* stylelint-disable selector-max-type */
  /* stylelint-enable selector-max-type */
}
a svg {
  fill: #4b4b4d;
}
a:hover {
  color: #fecc00;
}
a:hover svg {
  fill: #fecc00;
}

b,
strong {
  font-weight: 700;
}

i,
em,
cite {
  font-style: italic;
}

hr {
  border-bottom: 1px solid #b2b2b2;
  margin: 0.5rem 0;
}
hr::after {
  content: "";
  display: table;
  clear: both;
}

small {
  font-size: 0.8rem;
}
@media only screen and (min-width: 768px) {
  small {
    font-size: 0.9333333333rem;
  }
}

big {
  font-size: 2.4rem;
}

p,
blockquote,
iframe {
  margin: 0.5rem 0;
}

.container {
  display: block;
  width: 100%;
  max-width: 1200px;
  margin: auto;
  padding: 0 15px;
}
@media only screen and (min-width: 0) {
  .container--track-configurator {
    padding: 0;
  }
}
@media only screen and (min-width: 768px) {
  .container--track-configurator {
    padding: 0 15px;
  }
}
.container--checkout {
  max-width: 990px;
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .container--checkout {
    padding-bottom: 8rem;
  }
}
.container--expand {
  max-width: 100%;
}
.container--pdp-header {
  position: relative;
  z-index: 1;
  max-height: 100%;
}
.container--full-width {
  max-width: 1920px;
}
.container--medium {
  max-width: 1440px;
}
.container--no-padding {
  padding: 0;
}
.container--no-padding-left {
  padding-left: 0;
}

.col {
  float: left;
  display: block;
  -webkit-box-flex: 0;
      -ms-flex-positive: 0;
          flex-grow: 0;
  -ms-flex-preferred-size: auto;
      flex-basis: auto;
}
.col::after {
  content: "";
  display: table;
  clear: both;
}
@media only screen and (min-width: 0) {
  .col--sm-1 {
    width: 8.3333333333%;
    min-width: 8.3333333333%;
  }
  .col--sm-2 {
    width: 16.6666666667%;
    min-width: 16.6666666667%;
  }
  .col--sm-3 {
    width: 25%;
    min-width: 25%;
  }
  .col--sm-4 {
    width: 33.3333333333%;
    min-width: 33.3333333333%;
  }
  .col--sm-5 {
    width: 41.6666666667%;
    min-width: 41.6666666667%;
  }
  .col--sm-6 {
    width: 50%;
    min-width: 50%;
  }
  .col--sm-7 {
    width: 58.3333333333%;
    min-width: 58.3333333333%;
  }
  .col--sm-8 {
    width: 66.6666666667%;
    min-width: 66.6666666667%;
  }
  .col--sm-9 {
    width: 75%;
    min-width: 75%;
  }
  .col--sm-10 {
    width: 83.3333333333%;
    min-width: 83.3333333333%;
  }
  .col--sm-11 {
    width: 91.6666666667%;
    min-width: 91.6666666667%;
  }
  .col--sm-12 {
    width: 100%;
    min-width: 100%;
  }
  .col--sm-auto {
    width: auto;
    min-width: 0;
  }
}
@media only screen and (min-width: 0) {
  .col--sp-1 {
    width: 8.3333333333%;
    min-width: 8.3333333333%;
  }
  .col--sp-2 {
    width: 16.6666666667%;
    min-width: 16.6666666667%;
  }
  .col--sp-3 {
    width: 25%;
    min-width: 25%;
  }
  .col--sp-4 {
    width: 33.3333333333%;
    min-width: 33.3333333333%;
  }
  .col--sp-5 {
    width: 41.6666666667%;
    min-width: 41.6666666667%;
  }
  .col--sp-6 {
    width: 50%;
    min-width: 50%;
  }
  .col--sp-7 {
    width: 58.3333333333%;
    min-width: 58.3333333333%;
  }
  .col--sp-8 {
    width: 66.6666666667%;
    min-width: 66.6666666667%;
  }
  .col--sp-9 {
    width: 75%;
    min-width: 75%;
  }
  .col--sp-10 {
    width: 83.3333333333%;
    min-width: 83.3333333333%;
  }
  .col--sp-11 {
    width: 91.6666666667%;
    min-width: 91.6666666667%;
  }
  .col--sp-12 {
    width: 100%;
    min-width: 100%;
  }
  .col--sp-auto {
    width: auto;
    min-width: 0;
  }
}
@media only screen and (min-width: 550px) {
  .col--md-1 {
    width: 8.3333333333%;
    min-width: 8.3333333333%;
  }
  .col--md-2 {
    width: 16.6666666667%;
    min-width: 16.6666666667%;
  }
  .col--md-3 {
    width: 25%;
    min-width: 25%;
  }
  .col--md-4 {
    width: 33.3333333333%;
    min-width: 33.3333333333%;
  }
  .col--md-5 {
    width: 41.6666666667%;
    min-width: 41.6666666667%;
  }
  .col--md-6 {
    width: 50%;
    min-width: 50%;
  }
  .col--md-7 {
    width: 58.3333333333%;
    min-width: 58.3333333333%;
  }
  .col--md-8 {
    width: 66.6666666667%;
    min-width: 66.6666666667%;
  }
  .col--md-9 {
    width: 75%;
    min-width: 75%;
  }
  .col--md-10 {
    width: 83.3333333333%;
    min-width: 83.3333333333%;
  }
  .col--md-11 {
    width: 91.6666666667%;
    min-width: 91.6666666667%;
  }
  .col--md-12 {
    width: 100%;
    min-width: 100%;
  }
  .col--md-auto {
    width: auto;
    min-width: 0;
  }
}
@media only screen and (min-width: 768px) {
  .col--lg-1 {
    width: 8.3333333333%;
    min-width: 8.3333333333%;
  }
  .col--lg-2 {
    width: 16.6666666667%;
    min-width: 16.6666666667%;
  }
  .col--lg-3 {
    width: 25%;
    min-width: 25%;
  }
  .col--lg-4 {
    width: 33.3333333333%;
    min-width: 33.3333333333%;
  }
  .col--lg-5 {
    width: 41.6666666667%;
    min-width: 41.6666666667%;
  }
  .col--lg-6 {
    width: 50%;
    min-width: 50%;
  }
  .col--lg-7 {
    width: 58.3333333333%;
    min-width: 58.3333333333%;
  }
  .col--lg-8 {
    width: 66.6666666667%;
    min-width: 66.6666666667%;
  }
  .col--lg-9 {
    width: 75%;
    min-width: 75%;
  }
  .col--lg-10 {
    width: 83.3333333333%;
    min-width: 83.3333333333%;
  }
  .col--lg-11 {
    width: 91.6666666667%;
    min-width: 91.6666666667%;
  }
  .col--lg-12 {
    width: 100%;
    min-width: 100%;
  }
  .col--lg-auto {
    width: auto;
    min-width: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .col--xl-1 {
    width: 8.3333333333%;
    min-width: 8.3333333333%;
  }
  .col--xl-2 {
    width: 16.6666666667%;
    min-width: 16.6666666667%;
  }
  .col--xl-3 {
    width: 25%;
    min-width: 25%;
  }
  .col--xl-4 {
    width: 33.3333333333%;
    min-width: 33.3333333333%;
  }
  .col--xl-5 {
    width: 41.6666666667%;
    min-width: 41.6666666667%;
  }
  .col--xl-6 {
    width: 50%;
    min-width: 50%;
  }
  .col--xl-7 {
    width: 58.3333333333%;
    min-width: 58.3333333333%;
  }
  .col--xl-8 {
    width: 66.6666666667%;
    min-width: 66.6666666667%;
  }
  .col--xl-9 {
    width: 75%;
    min-width: 75%;
  }
  .col--xl-10 {
    width: 83.3333333333%;
    min-width: 83.3333333333%;
  }
  .col--xl-11 {
    width: 91.6666666667%;
    min-width: 91.6666666667%;
  }
  .col--xl-12 {
    width: 100%;
    min-width: 100%;
  }
  .col--xl-auto {
    width: auto;
    min-width: 0;
  }
}
@media only screen and (min-width: 1200px) {
  .col--xxl-1 {
    width: 8.3333333333%;
    min-width: 8.3333333333%;
  }
  .col--xxl-2 {
    width: 16.6666666667%;
    min-width: 16.6666666667%;
  }
  .col--xxl-3 {
    width: 25%;
    min-width: 25%;
  }
  .col--xxl-4 {
    width: 33.3333333333%;
    min-width: 33.3333333333%;
  }
  .col--xxl-5 {
    width: 41.6666666667%;
    min-width: 41.6666666667%;
  }
  .col--xxl-6 {
    width: 50%;
    min-width: 50%;
  }
  .col--xxl-7 {
    width: 58.3333333333%;
    min-width: 58.3333333333%;
  }
  .col--xxl-8 {
    width: 66.6666666667%;
    min-width: 66.6666666667%;
  }
  .col--xxl-9 {
    width: 75%;
    min-width: 75%;
  }
  .col--xxl-10 {
    width: 83.3333333333%;
    min-width: 83.3333333333%;
  }
  .col--xxl-11 {
    width: 91.6666666667%;
    min-width: 91.6666666667%;
  }
  .col--xxl-12 {
    width: 100%;
    min-width: 100%;
  }
  .col--xxl-auto {
    width: auto;
    min-width: 0;
  }
}
.col--expand {
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
}
.col--mobile-expand {
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
}
@media only screen and (min-width: 768px) {
  .col--mobile-expand {
    -webkit-box-flex: 0;
        -ms-flex-positive: 0;
            flex-grow: 0;
  }
}
.col--top {
  -ms-flex-item-align: start;
      align-self: flex-start;
  margin-bottom: auto;
}
.col--bottom {
  -ms-flex-item-align: end;
      align-self: flex-end;
  margin-top: auto;
}
.col--left {
  justify-self: flex-start;
  margin-right: auto;
}
.col--right {
  justify-self: flex-end;
  margin-left: auto;
}
.col--center {
  justify-self: center;
  margin-left: auto;
  margin-right: auto;
}
.col--middle {
  -ms-flex-item-align: center;
      align-self: center;
  margin-top: auto;
  margin-bottom: auto;
}
.col--equal {
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  -ms-flex-preferred-size: 0;
      flex-basis: 0;
}
.col--bottom-indent {
  padding-bottom: 9px;
}
@media only screen and (min-width: 768px) {
  .col--bottom-indent {
    padding-bottom: 15px;
  }
}

.grid {
  clear: both;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-flow: row wrap;
          flex-flow: row wrap;
  -webkit-box-align: start;
      -ms-flex-align: start;
          align-items: flex-start;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.grid::after {
  content: "";
  display: table;
  clear: both;
}
.grid--row {
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-flow: row;
          flex-flow: row;
}
.grid--wide {
  width: 100%;
}
.grid--h-full {
  height: 100%;
}
.grid--top {
  -webkit-box-align: start;
      -ms-flex-align: start;
          align-items: flex-start;
}
.grid--bottom {
  -webkit-box-align: end;
      -ms-flex-align: end;
          align-items: flex-end;
}
.grid--left {
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.grid--right {
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
}
.grid--center {
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
}
.grid--middle {
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.grid--stretch {
  -webkit-box-align: stretch;
      -ms-flex-align: stretch;
          align-items: stretch;
}
.grid--stretch > .col {
  margin-top: 0;
  margin-bottom: 0;
}
.grid--gap {
  margin-left: -9px;
  margin-right: -9px;
}
@media only screen and (min-width: 768px) {
  .grid--gap {
    margin-left: -15px;
    margin-right: -15px;
  }
}
.grid--gap > .col {
  padding-left: 9px;
  padding-right: 9px;
}
@media only screen and (min-width: 768px) {
  .grid--gap > .col {
    padding-left: 15px;
    padding-right: 15px;
  }
}
.grid--gap-smaller {
  margin-left: -0.3333333333rem;
  margin-right: -0.3333333333rem;
}
.grid--gap-smaller > .col {
  padding-left: 0.3333333333rem;
  padding-right: 0.3333333333rem;
}
.grid--justify-column {
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
}
.grid--justify-column > .col {
  margin-top: auto;
  margin-bottom: auto;
}
.grid--justify-column > .col:first-child {
  margin-top: 0;
}
.grid--justify-column > .col:last-of-type {
  margin-bottom: 0;
}
.grid--justify {
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
}
.grid--justify > .col {
  margin-left: auto;
  margin-right: auto;
}
.grid--justify > .col:first-child {
  margin-left: 0;
}
.grid--justify > .col:last-child {
  margin-right: 0;
}
.grid--nowrap {
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
}
@media only screen and (min-width: 768px) {
  .grid--nowrap-lg-only {
    -ms-flex-wrap: nowrap;
        flex-wrap: nowrap;
  }
}
.grid--column {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
.grid--column-mob-reverse {
  -webkit-box-orient: vertical;
  -webkit-box-direction: reverse;
      -ms-flex-direction: column-reverse;
          flex-direction: column-reverse;
}
@media only screen and (min-width: 768px) {
  .grid--column-mob-reverse {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
  }
}
@media only screen and (max-width: 1023px) {
  .grid--column-mob-reverse-only-xl {
    -webkit-box-orient: vertical;
    -webkit-box-direction: reverse;
        -ms-flex-direction: column-reverse;
            flex-direction: column-reverse;
  }
}
.grid--inline {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
}
.grid.container {
  max-width: 1200px;
}

@-webkit-keyframes spin-to {
  from {
    -webkit-transform: rotate(0deg);
            transform: rotate(0deg);
  }
  to {
    -webkit-transform: rotate(360deg);
            transform: rotate(360deg);
  }
}

@keyframes spin-to {
  from {
    -webkit-transform: rotate(0deg);
            transform: rotate(0deg);
  }
  to {
    -webkit-transform: rotate(360deg);
            transform: rotate(360deg);
  }
}
@-webkit-keyframes pulse-highlight {
  0% {
    -webkit-transform: scale(1);
            transform: scale(1);
  }
  50% {
    -webkit-transform: scale(1.2);
            transform: scale(1.2);
  }
  100% {
    -webkit-transform: scale(1);
            transform: scale(1);
  }
}
@keyframes pulse-highlight {
  0% {
    -webkit-transform: scale(1);
            transform: scale(1);
  }
  50% {
    -webkit-transform: scale(1.2);
            transform: scale(1.2);
  }
  100% {
    -webkit-transform: scale(1);
            transform: scale(1);
  }
}
.flex {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

.flex-inline {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
}

.flex-row {
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
}

.flex-row-reverse {
  -webkit-box-orient: horizontal;
  -webkit-box-direction: reverse;
      -ms-flex-direction: row-reverse;
          flex-direction: row-reverse;
}

.flex-col {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}

.flex-col-reverse {
  -webkit-box-orient: vertical;
  -webkit-box-direction: reverse;
      -ms-flex-direction: column-reverse;
          flex-direction: column-reverse;
}

.flex-wrap {
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
}

.flex-no-wrap {
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
}

.flex-wrap-reverse {
  -ms-flex-wrap: wrap-reverse;
      flex-wrap: wrap-reverse;
}

.items-stretch {
  -webkit-box-align: stretch;
      -ms-flex-align: stretch;
          align-items: stretch;
}

.items-start {
  -webkit-box-align: start;
      -ms-flex-align: start;
          align-items: flex-start;
}

.items-center {
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}

.items-end {
  -webkit-box-align: end;
      -ms-flex-align: end;
          align-items: flex-end;
}

.items-baseline {
  -webkit-box-align: baseline;
      -ms-flex-align: baseline;
          align-items: baseline;
}

.content-start {
  -ms-flex-line-pack: start;
      align-content: flex-start;
}

.content-center {
  -ms-flex-line-pack: center;
      align-content: center;
}

.content-end {
  -ms-flex-line-pack: end;
      align-content: flex-end;
}

.content-between {
  -ms-flex-line-pack: justify;
      align-content: space-between;
}

.content-around {
  -ms-flex-line-pack: distribute;
      align-content: space-around;
}

.self-auto {
  -ms-flex-item-align: auto;
      align-self: auto;
}

.self-start {
  -ms-flex-item-align: start;
      align-self: flex-start;
}

.self-center {
  -ms-flex-item-align: center;
      align-self: center;
}

.self-end {
  -ms-flex-item-align: end;
      align-self: flex-end;
}

.self-stretch {
  -ms-flex-item-align: stretch;
      align-self: stretch;
}

.justify-start {
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}

.justify-center {
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
}

.justify-end {
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
}

.justify-between {
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
}

.justify-around {
  -ms-flex-pack: distribute;
      justify-content: space-around;
}

.flex-initial {
  -webkit-box-flex: initial;
      -ms-flex: initial;
          flex: initial;
}

.flex-1 {
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
}

.flex-auto {
  -webkit-box-flex: 1;
      -ms-flex: auto;
          flex: auto;
}

.flex-none {
  -webkit-box-flex: 0;
      -ms-flex: none;
          flex: none;
}

.flex-grow {
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
}

.flex-no-grow {
  -webkit-box-flex: 0;
      -ms-flex-positive: 0;
          flex-grow: 0;
}

.flex-shrink {
  -ms-flex-negative: 1;
      flex-shrink: 1;
}

.flex-no-shrink {
  -webkit-box-flex: 0;
      -ms-flex-positive: 0;
          flex-grow: 0;
}

.w-full {
  width: 100%;
}

.h-full {
  height: 100%;
}

.v-cloak--block, .v-cloak--inline, .v-cloak--inlineBlock {
  display: none !important;
}

[v-cloak] .v-cloak--block {
  display: block !important;
}

[v-cloak] .v-cloak--inline {
  display: inline !important;
}

[v-cloak] .v-cloak--inlineBlock {
  display: inline-block !important;
}

[v-cloak] .v-cloak--hidden {
  display: none !important;
}

[v-cloak] .v-cloak--invisible {
  visibility: hidden !important;
}

.overflow-wrap-break-word {
  overflow-wrap: break-word;
}

.overflow-hidden {
  overflow: hidden;
}

@media only screen and (min-width: 0) {
  .overflow-hidden-sm {
    overflow: hidden;
  }
}

@media only screen and (min-width: 0) {
  .overflow-unset-sm {
    overflow: unset;
  }
}

@media only screen and (min-width: 0) {
  .overflow-hidden-sp {
    overflow: hidden;
  }
}

@media only screen and (min-width: 0) {
  .overflow-unset-sp {
    overflow: unset;
  }
}

@media only screen and (min-width: 550px) {
  .overflow-hidden-md {
    overflow: hidden;
  }
}

@media only screen and (min-width: 550px) {
  .overflow-unset-md {
    overflow: unset;
  }
}

@media only screen and (min-width: 768px) {
  .overflow-hidden-lg {
    overflow: hidden;
  }
}

@media only screen and (min-width: 768px) {
  .overflow-unset-lg {
    overflow: unset;
  }
}

@media only screen and (min-width: 1024px) {
  .overflow-hidden-xl {
    overflow: hidden;
  }
}

@media only screen and (min-width: 1024px) {
  .overflow-unset-xl {
    overflow: unset;
  }
}

@media only screen and (min-width: 1200px) {
  .overflow-hidden-xxl {
    overflow: hidden;
  }
}

@media only screen and (min-width: 1200px) {
  .overflow-unset-xxl {
    overflow: unset;
  }
}

.cell-fitwidth {
  width: 0.0666666667rem;
  white-space: nowrap;
}

pre {
  font-family: "Consolas", "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Monaco", "Courier New", "Courier", monospace;
  background: #fff;
  font-size: 14px;
  padding: 14px;
  line-height: 1.3;
  width: 100%;
  white-space: pre-wrap;
  overflow-x: auto;
  -moz-tab-size: 2;
    -o-tab-size: 2;
       tab-size: 2;
  border-left: 12px solid #333;
  margin-bottom: 10px;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.sort__col:not(:last-child) {
  padding-right: 0.5rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.suggestion-product {
  padding-bottom: 0.6666666667rem;
}
.suggestion-product__title {
  font-size: 1.1333333333rem;
  font-weight: 400;
  line-height: normal;
  letter-spacing: 0.0133333333rem;
  padding-bottom: 1.0666666667rem;
  padding-top: 1.7333333333rem;
  color: #929292;
}
.suggestion-product__link {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  color: #929292;
  -webkit-transition: color 250ms ease-in-out;
  transition: color 250ms ease-in-out;
}
.suggestion-product__link:hover {
  color: #b2b2b2;
}
.suggestion-product__thumbnail {
  min-width: 3.4666666667rem;
  width: 3.4666666667rem;
  overflow: hidden;
}
@media only screen and (min-width: 768px) {
  .suggestion-product__thumbnail {
    min-width: 2.8rem;
    width: 2.8rem;
  }
}
.suggestion-product__thumbnail::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(26, 23, 27, 0.05);
  z-index: 1;
}
.suggestion-product__thumbnail .thumbnail__image {
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
          transform: translate(-50%, -50%);
  bottom: auto;
  right: auto;
}
.suggestion-product__name {
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  padding-left: 0.9333333333rem;
  font-size: 0.8rem;
  font-weight: 500;
  line-height: 0.9333333333rem;
  letter-spacing: 0.0066666667rem;
}
@media only screen and (min-width: 768px) {
  .suggestion-product__name {
    font-size: 0.8666666667rem;
  }
}
.suggestion-product__price {
  display: block;
  padding-top: 3px;
}
.suggestion-product__price .price__amount {
  color: #b2b2b2;
  font-size: 0.8666666667rem;
  font-weight: 700;
}
.suggestion-product__price .price__amount--alt {
  color: #4b4b4d;
}
.suggestion-product__price .price__amount--original {
  font-size: 0.8666666667rem;
  font-weight: 400;
  text-decoration: line-through;
}
.suggestion-product__price .price__mode {
  display: none;
}
@media only screen and (min-width: 768px) {
  .suggestion-product__price .price__mode {
    display: block;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-carousel {
  position: relative;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.badge {
  font-size: 0.9333333333rem;
  display: inline-block;
  padding: 0.1rem 0.5rem;
  background-color: rgb(255, 239.7440944882, 177.5);
  color: rgb(203, 163.0393700787, 0);
  border-radius: 10px;
  font-size: 0.7333333333rem;
  line-height: normal;
  font-weight: 700;
  letter-spacing: 0.0266666667rem;
  color: #fff;
  background-color: #ececec;
}
.badge--hollow {
  border: 1px solid #dadada;
  background: none;
  color: #1a171b;
}
.badge--success {
  background-color: rgb(69.7862068966, 253.7137931034, 141.8137931034);
  color: rgb(0.6482758621, 93.3517241379, 36.9517241379);
}
.badge--success-light {
  background-color: white;
  color: rgb(144.5555555556, 194.5185185185, 102.4814814815);
}
.badge--warning {
  background-color: rgb(249.85, 232.8326086957, 208.65);
  color: rgb(206.1, 130.4304347826, 22.9);
}
.badge--alert {
  background-color: rgb(248.3963414634, 181.3170731707, 176.1036585366);
  color: rgb(179.9390243902, 26.9512195122, 15.0609756098);
}
.badge--info {
  background-color: rgb(255, 239.7440944882, 177.5);
  color: rgb(203, 163.0393700787, 0);
}
.badge--neutral {
  background-color: rgb(235.25, 235.25, 235.25);
  color: rgb(120.5, 120.5, 120.5);
}
.badge--shopping-list, .badge--multi-cart {
  display: inline-block;
  color: #929292;
  padding: 0.2666666667rem 0.3333333333rem;
  margin-right: 0.6rem;
  vertical-align: middle;
  min-width: 3.4666666667rem;
}
@media only screen and (min-width: 768px) {
  .badge--shopping-list, .badge--multi-cart {
    padding-left: 0.6rem;
    padding-right: 0.6rem;
    min-width: 4.2666666667rem;
  }
}
.badge--title {
  background-color: #b2b2b2;
  text-transform: uppercase;
}
.badge--access {
  color: #fff;
  background-color: #fecc00;
  text-transform: uppercase;
}
.badge--summary {
  text-transform: uppercase;
  letter-spacing: 0.0133333333rem;
  padding: 0.3333333333rem 0.5333333333rem;
}
.badge--counter {
  background-color: rgba(208, 208, 208, 0.3);
  border-radius: 10px;
  font-size: 0.7333333333rem;
  line-height: normal;
  color: #b2b2b2;
  padding: 0.3333333333rem 0.5333333333rem;
}
.badge--order {
  background-color: #4b4b4d;
  color: #000;
  font-size: 0.8rem;
  letter-spacing: 0.01rem;
  padding: 0.1333333333rem 0.6666666667rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.box {
  background-color: #1a171b;
  border: 0 none;
  padding: 1.8rem 1.3333333333rem 2rem;
  margin: 0;
}
@media only screen and (min-width: 768px) {
  .box {
    padding: 2.1333333333rem;
  }
}
.box--small {
  padding: 1.0666666667rem 2.1333333333rem;
}
.box--smaller {
  padding: 1.0666666667rem 1.3333333333rem;
}
.box--medium {
  margin: 0 -1rem 1rem;
  padding: 1rem;
}
@media only screen and (min-width: 768px) {
  .box--medium {
    margin: 0 0 2rem;
    padding: 1.8rem 2rem 2rem;
  }
}
.box--white {
  background-color: #fff;
}
.box__separator {
  border: none;
  border-bottom: 0.0666666667rem solid #ececec;
  margin: 1rem -1.3333333333rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.button {
  -webkit-transition: color 250ms ease-in-out, border-color 250ms ease-in-out, background-color 250ms ease-in-out;
  transition: color 250ms ease-in-out, border-color 250ms ease-in-out, background-color 250ms ease-in-out;
  background-color: #fecc00;
  border: solid 1px #fecc00;
  border-radius: 10px;
  color: #4b4b4d;
  text-transform: uppercase;
  font-size: 0.9333333333rem;
  font-weight: 500;
  line-height: 1.2rem;
  padding: 0.8rem 1.3333333333rem;
  text-align: center;
  cursor: pointer;
}
.button__label-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
}
.button:hover, .button:focus {
  background-color: #4b4b4d;
  border-color: #4b4b4d;
  color: #fff;
  text-decoration: none;
}
.button:hover svg, .button:focus svg {
  fill: #fff;
}
.button:hover .button__icon-left-hover, .button:focus .button__icon-left-hover {
  opacity: 1;
}
.button:hover .button__icon-left--has-hover, .button:focus .button__icon-left--has-hover {
  opacity: 0;
}
.button:hover .loading-spinner__dot, .button:focus .loading-spinner__dot {
  background-color: #fff;
}
.button__icon-left-hover {
  opacity: 0;
}
.button__icon-right {
  -webkit-transition: -webkit-transform 250ms ease-in-out;
  transition: -webkit-transform 250ms ease-in-out;
  transition: transform 250ms ease-in-out;
  transition: transform 250ms ease-in-out, -webkit-transform 250ms ease-in-out;
  margin-left: 0.5rem;
}
.button__icon-bottom-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  width: 100%;
}
.button__icon-left, .button__icon-left-hover {
  -webkit-transition: opacity 250ms ease-in-out;
  transition: opacity 250ms ease-in-out;
  top: 0;
  left: 0;
  position: absolute;
}
.button__icon-bottom.icon--is-sprite, .button__icon-right.icon--is-sprite, .button__icon-left.icon--is-sprite, .button__icon-left-hover.icon--is-sprite {
  width: 1.3333333333rem;
  height: 1.3333333333rem;
}
.button__icon-bottom.icon svg, .button__icon-right.icon svg, .button__icon-left.icon svg, .button__icon-left-hover.icon svg {
  width: 1rem;
  height: 1rem;
}
.button__icon-left-container {
  position: relative;
  width: 1.6666666667rem;
  height: 1.3333333333rem;
  font-size: 1.6666666667rem;
  margin-right: 0.5rem;
}
.button__icon-left-container .button__icon-bottom.icon, .button__icon-left-container .button__icon-right.icon, .button__icon-left-container .button__icon-left.icon, .button__icon-left-container .button__icon-left-hover.icon {
  /* stylelint-disable-next-line max-nesting-depth */
}
.button__icon-left-container .button__icon-bottom.icon svg, .button__icon-left-container .button__icon-right.icon svg, .button__icon-left-container .button__icon-left.icon svg, .button__icon-left-container .button__icon-left-hover.icon svg {
  width: 1.6666666667rem;
  height: 1.6666666667rem;
  margin-top: -0.1666666667rem;
}
.button--animate-icon-right:hover .button__icon-right, .button--animate-icon-right:focus .button__icon-right {
  -webkit-transform: translateX(0.3333333333rem);
          transform: translateX(0.3333333333rem);
}
.button--animate-icon-left:hover .button__icon-left, .button--animate-icon-left:focus .button__icon-left {
  -webkit-transition: -webkit-transform 250ms ease-in-out;
  transition: -webkit-transform 250ms ease-in-out;
  transition: transform 250ms ease-in-out;
  transition: transform 250ms ease-in-out, -webkit-transform 250ms ease-in-out;
  -webkit-transform: translateX(-0.3333333333rem);
          transform: translateX(-0.3333333333rem);
}
.button--no-padding {
  padding: 0;
}
.button--link, .button--link-bg-alt {
  background-color: rgba(255, 255, 255, 0);
  border: 0 solid rgba(255, 255, 255, 0);
  text-transform: inherit;
  text-decoration: underline;
}
.button--link .button__icon-right, .button--link-bg-alt .button__icon-right {
  margin-left: 0.25rem;
}
.button--link:hover, .button--link:focus, .button--link-bg-alt:hover, .button--link-bg-alt:focus {
  border-color: rgba(255, 255, 255, 0);
  text-decoration: none;
}
.button--link .button__label-container, .button--link-bg-alt .button__label-container {
  text-decoration: underline;
}
.button--link .button__label-container:hover, .button--link .button__label-container:focus, .button--link-bg-alt .button__label-container:hover, .button--link-bg-alt .button__label-container:focus {
  text-decoration: none;
}
.button--link {
  color: #4b4b4d;
}
.button--link:hover, .button--link:focus {
  color: #4b4b4d;
  background-color: rgba(255, 255, 255, 0);
}
.button--link:hover svg, .button--link:focus svg {
  fill: #4b4b4d;
}
.button--link.button[disabled], .button--link--disabled.button--disabled {
  background-color: transparent;
  border-color: unset;
  color: #d0d0d0;
}
.button--link.button[disabled]:hover, .button--link.button[disabled]:focus, .button--link--disabled.button--disabled:hover, .button--link--disabled.button--disabled:focus {
  background-color: transparent;
  border-color: unset;
}
.button--link-bg-alt {
  color: #fff;
}
.button--link-bg-alt svg {
  fill: #fff;
}
.button--link-bg-alt:hover, .button--link-bg-alt:focus {
  color: #fff;
  background-color: #4b4b4d;
  /* stylelint-disable-next-line max-nesting-depth */
}
.button--link-bg-alt:hover svg, .button--link-bg-alt:focus svg {
  fill: #fff;
}
.button--bg-alt:hover, .button--bg-alt:focus {
  border-color: #fff;
}
.button--bg-alt:hover svg, .button--bg-alt:focus svg {
  fill: #fff;
}
.button--white-main-border-small {
  background-color: #fff;
  border: 1px solid #fecc00;
  color: #4b4b4d;
  text-transform: initial;
  padding: 0.4rem 1.3333333333rem;
  font-size: 0.8rem;
}
.button--white-main-border-small:hover, .button--white-main-border-small:focus {
  background-color: #fecc00;
  border: 1px solid #fecc00;
  color: #4b4b4d;
}
.button--white-main-border-small.button[disabled] {
  background-color: #fff;
  opacity: 0.5;
  color: #4b4b4d;
}
.button--white-main-border-small.button[disabled]:hover, .button--white-main-border-small.button[disabled]:focus {
  background-color: #fff;
  /* stylelint-disable-next-line max-nesting-depth */
}
.button--white-main-border-small.button[disabled]:hover .loading-spinner__dot, .button--white-main-border-small.button[disabled]:focus .loading-spinner__dot {
  background-color: #4b4b4d;
}
.button--white-main-border-small .loading-spinner__dot {
  background-color: #4b4b4d;
  top: -0.4666666667rem;
}
.button--hollow {
  background-color: rgba(255, 255, 255, 0);
  border: 1px solid #fecc00;
  color: #4b4b4d;
}
.button--hollow-bg-alt {
  background-color: rgba(255, 255, 255, 0);
  color: #fff;
}
.button--hollow-bg-alt svg {
  fill: #fff;
}
.button--hollow-bg-alt:hover, .button--hollow-bg-alt:focus {
  color: #fff;
  border-color: #fff;
  background-color: #4b4b4d;
  /* stylelint-disable-next-line max-nesting-depth */
}
.button--hollow-bg-alt:hover svg, .button--hollow-bg-alt:focus svg {
  fill: #fff;
}
.button--hollow-bg-white {
  background-color: #fff;
  color: #4b4b4d;
}
.button--hollow-bg-white svg {
  fill: #4b4b4d;
}
.button--hollow-bg-white:hover, .button--hollow-bg-white:focus {
  color: #4b4b4d;
  border-color: #fecc00;
  background-color: #fecc00;
}
.button--hollow:hover, .button--hollow:focus {
  border-color: #fecc00;
  color: #4b4b4d;
  background-color: #fecc00;
}
.button--hollow-icon {
  -webkit-transition: color 250ms ease-in-out;
  transition: color 250ms ease-in-out;
  padding: 0.25rem 0.5rem;
  background-color: rgba(255, 255, 255, 0);
  border: none;
  color: #fecc00;
}
.button--hollow-icon:hover, .button--hollow-icon:focus {
  background-color: rgba(255, 255, 255, 0);
  color: rgb(255, 239.7440944882, 177.5);
}
.button--hollow-second {
  color: #fff;
  border-color: #fff;
}
.button--hollow-second:hover, .button--hollow-second:focus {
  color: rgb(229.5, 229.5, 229.5);
  background-color: rgba(255, 255, 255, 0);
  border-color: rgb(229.5, 229.5, 229.5);
}
.button--hollow-second-white {
  background-color: #fff;
  border-color: #fecc00;
  /* stylelint-disable-next-line max-nesting-depth */
}
.button--hollow-second-white:hover, .button--hollow-second-white:focus {
  color: #4b4b4d;
  border-color: #4b4b4d;
  background-color: #fff;
}
.button--hollow-alternative {
  color: #b2b2b2;
  border-color: #d0d0d0;
}
.button--hollow-alternative:hover, .button--hollow-alternative:focus {
  border-color: #b2b2b2;
  color: #fff;
  background-color: #b2b2b2;
}
.button--second {
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  background-color: #fff;
  border-color: #d0d0d0;
  color: #4b4b4d;
  text-transform: initial;
  padding: 0.4rem 1.3333333333rem;
  font-size: 0.8rem;
}
.button--second:hover, .button--second:focus {
  background-color: #d0d0d0;
  color: #4b4b4d;
  border-color: #d0d0d0;
}
.button--product-attributes-filter {
  background-color: #fff;
  color: #4b4b4d;
  border-color: #d0d0d0;
}
.button--product-attributes-filter svg {
  fill: #4b4b4d;
}
.button--product-attributes-filter:hover, .button--product-attributes-filter:focus {
  background-color: #fff;
  color: #4b4b4d;
  border-color: #fecc00;
}
.button--product-attributes-filter:hover svg, .button--product-attributes-filter:focus svg {
  fill: #4b4b4d;
}
.button--small {
  display: inline-block;
}
.button--medium {
  font-size: 0.9333333333rem;
  line-height: normal;
  padding: 0.6666666667rem 2rem;
}
@media only screen and (min-width: 768px) {
  .button--medium {
    font-size: 1.0666666667rem;
    line-height: 1.3333333333rem;
    padding: 1rem 1.8rem;
  }
}
.button--big {
  font-size: 1.0666666667rem;
  line-height: 1.3333333333rem;
  padding: 1rem 2.1333333333rem;
}
@media only screen and (min-width: 768px) {
  .button--big {
    padding-left: 1.8rem;
    padding-right: 1.8rem;
  }
}
.button--bigger {
  padding-top: 0.8rem;
  padding-bottom: 0.8rem;
}
.button--form {
  padding-top: 0.9333333333rem;
  padding-bottom: 0.9333333333rem;
}
.button--tight {
  padding-left: 1.3333333333rem;
  padding-right: 1.3333333333rem;
}
.button--mobile-tight {
  padding-left: 1rem;
  padding-right: 1rem;
}
@media only screen and (min-width: 768px) {
  .button--mobile-tight {
    padding-left: 2rem;
    padding-right: 2rem;
  }
}
.button--expand {
  width: 100%;
}
@media only screen and (max-width: 549px) {
  .button--expand-sm-only {
    width: 100%;
  }
}
@media only screen and (max-width: 767px) {
  .button--expand-sm-lg {
    width: 100%;
  }
}
.button--checkout {
  min-width: 13.3333333333rem;
}
.button--edit, .button--back {
  -webkit-transition: color 250ms ease-in-out;
  transition: color 250ms ease-in-out;
  color: #d0d0d0;
}
.button--edit:hover, .button--edit:focus, .button--back:hover, .button--back:focus {
  color: #6f6f6f;
}
.button--back {
  font-weight: 400;
}
.button--bold {
  font-weight: 700;
}
.button--lowercase {
  text-transform: lowercase;
}
.button[disabled], .button--disabled {
  background-color: #d0d0d0;
  border-color: #d0d0d0;
  color: #fff;
  cursor: not-allowed;
}
.button[disabled] svg, .button--disabled svg {
  fill: #fff;
}
.button[disabled]:hover, .button[disabled]:focus, .button--disabled:hover, .button--disabled:focus {
  background-color: #d0d0d0;
  border-color: #d0d0d0;
}
.button--justify {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  width: 100%;
  height: 100%;
}
.button--additional {
  padding: 0.9333333333rem 1.3333333333rem;
  background: #fff;
  border-color: #4b4b4d;
  color: #6f6f6f;
  -webkit-box-shadow: 0 0.6666666667rem 1.2rem 0 rgba(0, 0, 0, 0.05), 0 0.2rem 0.2rem 0 rgba(0, 0, 0, 0.04);
          box-shadow: 0 0.6666666667rem 1.2rem 0 rgba(0, 0, 0, 0.05), 0 0.2rem 0.2rem 0 rgba(0, 0, 0, 0.04);
  font-size: 1rem;
}
.button--w-auto {
  width: auto;
}
.button--shopping-list {
  width: calc(100% - 5rem);
}
@media only screen and (min-width: 768px) {
  .button--shopping-list {
    position: static;
    width: auto;
    bottom: 1.4666666667rem;
    left: 1.4666666667rem;
  }
}
.button--category-list {
  text-decoration: none;
}
.button--category-list .button__label-container {
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  -webkit-box-align: start;
      -ms-flex-align: start;
          align-items: flex-start;
  text-decoration: none;
}
.button--category-list .button__icon-left {
  margin-left: 0;
}
.button--category-list .button__icon-left-container {
  font-size: 0.8rem;
  line-height: 1.5;
  margin-right: 0;
  min-width: 1.6666666667rem;
}
.button--category-list .button__label {
  text-align: left;
}
.button--category-list[disabled], .button--category-list.button--disabled {
  background-color: rgba(255, 255, 255, 0);
  border-color: #d0d0d0;
  color: #4b4b4d;
  cursor: not-allowed;
}
.button--category-list[disabled]:hover, .button--category-list[disabled]:focus, .button--category-list.button--disabled:hover, .button--category-list.button--disabled:focus {
  background-color: #d0d0d0;
  border-color: #d0d0d0;
}
.button--fs-tiny {
  font-size: 0.8rem;
}
.button--fs-small {
  font-size: 0.9333333333rem;
}
.button--fs-small .icon {
  font-size: 1rem;
}
.button--fs-medium {
  font-size: 1.2rem;
}
.button--filter-submit, .button--filter-sort {
  width: 100%;
}
.button--filter-submit .button__label-container, .button--filter-sort .button__label-container {
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.button--no-horizontal-padding {
  padding-left: 0;
  padding-right: 0;
}
.button--hyphenate {
  -ms-word-break: break-all;
  word-break: break-all;
  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
  word-break: break-word;
  -ms-hyphens: auto;
      hyphens: auto;
}
.button--align-left .button__label-container {
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.button--dashed-border {
  border-style: dashed;
}
.button--no-radius {
  border-radius: 0;
}
.button--search svg {
  width: 2rem;
  height: 2rem;
}
.button--success {
  background-color: #019039;
  border-color: #019039;
}
.button--success:hover, .button--success:focus {
  background-color: rgb(0.6482758621, 93.3517241379, 36.9517241379);
  border-color: rgb(0.6482758621, 93.3517241379, 36.9517241379);
}
.button--success.button--hollow {
  background-color: rgba(255, 255, 255, 0);
  border-color: #019039;
  color: #019039;
}
.button--success.button--hollow:hover, .button--success.button--hollow:focus {
  background-color: #019039;
  color: #fff;
}
.button--success.button--hollow:hover svg, .button--success.button--hollow:focus svg {
  fill: #fff;
}
.button--sap-order-details-back-button .icon {
  font-size: 1.2rem;
}
.button--success-light {
  background-color: #abd18b;
  border-color: #abd18b;
}
.button--success-light:hover, .button--success-light:focus {
  background-color: rgb(144.5555555556, 194.5185185185, 102.4814814815);
  border-color: rgb(144.5555555556, 194.5185185185, 102.4814814815);
}
.button--success-light.button--hollow {
  background-color: rgba(255, 255, 255, 0);
  border-color: #abd18b;
  color: #abd18b;
}
.button--success-light.button--hollow:hover, .button--success-light.button--hollow:focus {
  background-color: #abd18b;
  color: #fff;
}
.button--success-light.button--hollow:hover svg, .button--success-light.button--hollow:focus svg {
  fill: #fff;
}
.button--sap-order-details-back-button .icon {
  font-size: 1.2rem;
}
.button--warning {
  background-color: #e89c30;
  border-color: #e89c30;
}
.button--warning:hover, .button--warning:focus {
  background-color: rgb(206.1, 130.4304347826, 22.9);
  border-color: rgb(206.1, 130.4304347826, 22.9);
}
.button--warning.button--hollow {
  background-color: rgba(255, 255, 255, 0);
  border-color: #e89c30;
  color: #e89c30;
}
.button--warning.button--hollow:hover, .button--warning.button--hollow:focus {
  background-color: #e89c30;
  color: #fff;
}
.button--warning.button--hollow:hover svg, .button--warning.button--hollow:focus svg {
  fill: #fff;
}
.button--sap-order-details-back-button .icon {
  font-size: 1.2rem;
}
.button--alert {
  background-color: #e32213;
  border-color: #e32213;
}
.button--alert:hover, .button--alert:focus {
  background-color: rgb(179.9390243902, 26.9512195122, 15.0609756098);
  border-color: rgb(179.9390243902, 26.9512195122, 15.0609756098);
}
.button--alert.button--hollow {
  background-color: rgba(255, 255, 255, 0);
  border-color: #e32213;
  color: #e32213;
}
.button--alert.button--hollow:hover, .button--alert.button--hollow:focus {
  background-color: #e32213;
  color: #fff;
}
.button--alert.button--hollow:hover svg, .button--alert.button--hollow:focus svg {
  fill: #fff;
}
.button--sap-order-details-back-button .icon {
  font-size: 1.2rem;
}
.button--info {
  background-color: #fecc00;
  border-color: #fecc00;
}
.button--info:hover, .button--info:focus {
  background-color: rgb(203, 163.0393700787, 0);
  border-color: rgb(203, 163.0393700787, 0);
}
.button--info.button--hollow {
  background-color: rgba(255, 255, 255, 0);
  border-color: #fecc00;
  color: #fecc00;
}
.button--info.button--hollow:hover, .button--info.button--hollow:focus {
  background-color: #fecc00;
  color: #fff;
}
.button--info.button--hollow:hover svg, .button--info.button--hollow:focus svg {
  fill: #fff;
}
.button--sap-order-details-back-button .icon {
  font-size: 1.2rem;
}
.button--neutral {
  background-color: #929292;
  border-color: #929292;
}
.button--neutral:hover, .button--neutral:focus {
  background-color: rgb(120.5, 120.5, 120.5);
  border-color: rgb(120.5, 120.5, 120.5);
}
.button--neutral.button--hollow {
  background-color: rgba(255, 255, 255, 0);
  border-color: #929292;
  color: #929292;
}
.button--neutral.button--hollow:hover, .button--neutral.button--hollow:focus {
  background-color: #929292;
  color: #fff;
}
.button--neutral.button--hollow:hover svg, .button--neutral.button--hollow:focus svg {
  fill: #fff;
}
.button--sap-order-details-back-button .icon {
  font-size: 1.2rem;
}
.button .loading-spinner {
  display: none;
}
.button.loading {
  cursor: wait;
}
.button.loading .loading-spinner {
  display: inline-block;
}
.button.loading .button__label-container {
  display: none;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.checkbox {
  display: inline-block;
}
.checkbox__container {
  cursor: pointer;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-flow: row nowrap;
          flex-flow: row nowrap;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  position: relative;
}
.checkbox__box {
  -webkit-transition: background-color 250ms ease-in-out, border-color 250ms ease-in-out;
  transition: background-color 250ms ease-in-out, border-color 250ms ease-in-out;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  width: 1.4666666667rem;
  height: 1.4666666667rem;
  border: 0.0666666667rem solid #d0d0d0;
  background-color: #fff;
  margin-right: 0.6666666667rem;
  text-align: center;
  border-radius: 0.1333333333rem;
  -webkit-box-flex: 0;
      -ms-flex: none;
          flex: none;
}
.checkbox__box svg {
  width: 1rem;
  height: 1rem;
}
@media only screen and (min-width: 768px) {
  .checkbox__box {
    margin-right: 0.9333333333rem;
    width: 1.4666666667rem;
    height: 1.4666666667rem;
  }
}
.checkbox__box--filter {
  width: 1.6rem;
  height: 1.6rem;
  line-height: 1.6rem;
}
@media only screen and (min-width: 768px) {
  .checkbox__box--filter {
    width: 1.125rem;
    height: 1.125rem;
    line-height: 1.125rem;
  }
}
.checkbox__box--shopping-list {
  position: static;
  z-index: 1;
}
@media only screen and (min-width: 768px) {
  .checkbox__box--shopping-list {
    position: static;
    margin-right: 0.6666666667rem;
  }
}
.checkbox__box--alternative {
  border: solid 0.1333333333rem #d0d0d0;
}
.checkbox__input {
  pointer-events: none;
  opacity: 0;
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  position: absolute;
  top: 0;
  width: 1.4666666667rem;
  height: 1.4666666667rem;
}
.checkbox__input:checked ~ .checkbox__box {
  background-color: #fff;
  color: #4b4b4d;
  /* stylelint-disable-next-line max-nesting-depth */
}
.checkbox__input:checked ~ .checkbox__box svg {
  fill: #4b4b4d;
}
.checkbox__input:checked ~ .checkbox__box .checkbox__check {
  pointer-events: all;
  visibility: visible;
  opacity: 1;
}
.checkbox__input:checked ~ .checkbox__box--alternative {
  background-color: #fff;
  border-color: #d0d0d0;
}
.checkbox__input:checked ~ .checkbox__label {
  /* stylelint-disable-next-line max-nesting-depth */
}
.checkbox__input:checked ~ .checkbox__label--alternative {
  font-weight: 400;
}
.checkbox__input:focus ~ .checkbox__box {
  -webkit-box-shadow: 0 0 0 3px #fecc00;
          box-shadow: 0 0 0 3px #fecc00;
}
.checkbox__input[disabled] ~ .checkbox__box, .checkbox__input[disabled] ~ .checkbox__box:hover, .checkbox__input--disabled ~ .checkbox__box, .checkbox__input--disabled ~ .checkbox__box:hover {
  background-color: #fff;
  border-color: #ececec;
  cursor: not-allowed;
}
.checkbox__input[disabled]:checked ~ .checkbox__box, .checkbox__input--disabled:checked ~ .checkbox__box {
  background-color: #ececec;
}
.checkbox__input[disabled] ~ .checkbox__label, .checkbox__input--disabled ~ .checkbox__label {
  color: #d0d0d0;
  cursor: not-allowed;
}
.checkbox__check {
  pointer-events: none;
  visibility: hidden;
  opacity: 0;
  -webkit-transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  color: #4b4b4d;
  vertical-align: baseline;
  line-height: 0.9333333333rem;
}
.checkbox__check--alternative {
  color: #d0d0d0;
  margin-bottom: 0.1333333333rem;
}
.checkbox__label {
  display: inline-block;
  vertical-align: middle;
  text-transform: none;
  font-size: 0.9333333333rem;
  font-weight: 400;
  margin: 0;
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
  -ms-flex-preferred-size: auto;
      flex-basis: auto;
}
.checkbox__label--filter {
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  font-size: 0.9333333333rem;
  font-weight: 400;
  text-transform: none;
  margin-bottom: 0;
}
.checkbox__label--alternative {
  margin-bottom: 0;
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.3333333333rem;
  color: #d0d0d0;
  text-transform: none;
}
.checkbox__counter {
  padding-left: 0.5333333333rem;
}
.checkbox--expand {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.checkbox--filter {
  width: 100%;
  font-size: 1rem;
  line-height: 1.2rem;
}
@media only screen and (min-width: 768px) {
  .checkbox--filter {
    font-size: 0.9333333333rem;
  }
}
.checkbox--alternative {
  margin-bottom: 1rem;
}
.checkbox--alternative:hover .checkbox__box--alternative {
  border-color: #d0d0d0;
}
@media only screen and (min-width: 768px) {
  .checkbox--pdp {
    margin-left: 8.8rem;
  }
}
.checkbox--pdp:hover .checkbox__box--alternative {
  border-color: #d0d0d0;
}
.checkbox--error .checkbox__box {
  border-color: #e32213;
}
.checkbox:hover .checkbox__box {
  border-color: #fecc00;
}
.checkbox:hover .checkbox__input[disabled] ~ .checkbox__box,
.checkbox:hover .checkbox__input--disabled ~ .checkbox__box {
  border-color: #ececec;
}
@media only screen and (max-width: 767px) {
  .checkbox.tooltip-position-left-lg .tooltip-button__tooltip {
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .checkbox.tooltip-position-left-lg .tooltip-button__tooltip::after {
    right: 4%;
  }
  .checkbox.tooltip-position-left-lg .tooltip-button__tooltip-container {
    left: auto;
    -webkit-transform: none;
            transform: none;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.icon {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  height: auto;
}
.icon svg {
  min-width: 100%;
}
.icon--cart svg {
  width: 1.6666666667rem;
  height: 1.6666666667rem;
}
.icon--energy svg {
  width: 2rem;
  height: 2rem;
}
@media only screen and (max-width: 1023px) {
  .icon--gallery-close {
    top: 7rem;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.input {
  -webkit-transition: border-color 250ms ease-in-out;
  transition: border-color 250ms ease-in-out;
  display: inline-block;
  padding: 0.25rem 0.5rem;
  border: 1px solid #d0d0d0;
  border-radius: 10px;
  border-color: #d0d0d0;
  color: #4b4b4d;
  padding: 0.9333333333rem 1.3333333333rem;
  font-size: 0.9333333333rem;
}
.input:focus {
  border-color: #b2b2b2;
}
.input::-webkit-input-placeholder {
  color: #1a171b;
}
.input::-moz-placeholder {
  color: #1a171b;
}
.input:-ms-input-placeholder {
  color: #1a171b;
}
.input::-ms-input-placeholder {
  color: #1a171b;
}
.input::placeholder {
  color: #1a171b;
}
.input--expand {
  display: block;
  width: 100%;
}
.input--naked {
  background-color: rgba(255, 255, 255, 0);
  border: none;
}
.input--error {
  border-color: #e32213;
}
.input[disabled], .input--disabled {
  background-color: #f4f4f4;
  cursor: not-allowed;
}
.input::-webkit-input-placeholder {
  color: #b2b2b2;
}
.input::-moz-placeholder {
  color: #b2b2b2;
}
.input:-ms-input-placeholder {
  color: #b2b2b2;
}
.input::-ms-input-placeholder {
  color: #b2b2b2;
}
.input::placeholder {
  color: #b2b2b2;
}
.input--small {
  font-size: 0.9333333333rem;
  line-height: 1.2rem;
  padding: 0.6666666667rem 1.0666666667rem;
}
.input--measurement-unit {
  max-width: 90px;
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
}
.input--measurement-unit::-webkit-inner-spin-button, .input--measurement-unit::-webkit-outer-spin-button {
  -webkit-appearance: none;
          appearance: none;
  margin: 0;
}
.input--filter-range {
  font-weight: 500;
  color: #929292;
  padding-right: 0.8rem;
  padding-left: 0.5333333333rem;
}
@media only screen and (min-width: 550px) {
  .input--filter-range {
    padding-left: 1.0666666667rem;
  }
}
.input--file {
  display: none;
}
.input--file ~ .button {
  margin-right: 1rem;
  margin-bottom: 0;
}
.input--file ~ .file-upload__path {
  -ms-flex-item-align: center;
      align-self: center;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.label {
  display: block;
  font-size: 1rem;
  font-weight: 700;
  color: #6f6f6f;
}
.label--required::after {
  content: "*";
  margin-left: 0.2rem;
  color: #4b4b4d;
}
.label--title::after {
  display: none;
}
.label--browse-file {
  -webkit-transition: border-color 250ms ease-in-out;
  transition: border-color 250ms ease-in-out;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  width: 100%;
  min-height: 8rem;
  padding: 0.6666666667rem;
  border: 0.1333333333rem dashed #d0d0d0;
  border-radius: 0.1333333333rem;
  background-color: #fff;
  color: #b2b2b2;
  text-transform: initial;
  font-weight: 400;
  cursor: pointer;
}
.label--browse-file:hover {
  border-color: #fecc00;
}
.label--browse-file-cursor-default {
  cursor: default;
}
.label--color-text {
  color: #4b4b4d;
}
.label--color-text svg {
  fill: #4b4b4d;
}
.label--color-white {
  color: #fff;
}
.label--color-white svg {
  fill: #fff;
}
.label--color-main {
  color: #fecc00;
}
.label--color-main svg {
  fill: #fecc00;
}
.label--color-alt {
  color: #4b4b4d;
}
.label--color-alt svg {
  fill: #4b4b4d;
}
.label--color-dark {
  color: #1a171b;
}
.label--color-dark svg {
  fill: #1a171b;
}
.label--color-black {
  color: #000;
}
.label--color-black svg {
  fill: #000;
}
.label--color-transparent {
  color: rgba(255, 255, 255, 0);
}
.label--color-transparent svg {
  fill: rgba(255, 255, 255, 0);
}
.label--color-overlay {
  color: rgba(255, 255, 255, 0.9);
}
.label--color-overlay svg {
  fill: rgba(255, 255, 255, 0.9);
}
.label--color-controls-overlay {
  color: rgba(255, 255, 255, 0.6);
}
.label--color-controls-overlay svg {
  fill: rgba(255, 255, 255, 0.6);
}
.label--color-gray-1 {
  color: #ececec;
}
.label--color-gray-1 svg {
  fill: #ececec;
}
.label--color-gray-2 {
  color: #d0d0d0;
}
.label--color-gray-2 svg {
  fill: #d0d0d0;
}
.label--color-gray-3 {
  color: #b2b2b2;
}
.label--color-gray-3 svg {
  fill: #b2b2b2;
}
.label--color-gray-4 {
  color: #929292;
}
.label--color-gray-4 svg {
  fill: #929292;
}
.label--color-gray-5 {
  color: #6f6f6f;
}
.label--color-gray-5 svg {
  fill: #6f6f6f;
}
.label--color-gray-6 {
  color: #4b4b4d;
}
.label--color-gray-6 svg {
  fill: #4b4b4d;
}
.label--color-gray-7 {
  color: #1a171b;
}
.label--color-gray-7 svg {
  fill: #1a171b;
}
.label--color-red-1 {
  color: #e32213;
}
.label--color-red-1 svg {
  fill: #e32213;
}
.label--color-red-2 {
  color: #e1306c;
}
.label--color-red-2 svg {
  fill: #e1306c;
}
.label--color-red-3 {
  color: #dd1a16;
}
.label--color-red-3 svg {
  fill: #dd1a16;
}
.label--color-facebook {
  color: #3b5998;
}
.label--color-facebook svg {
  fill: #3b5998;
}
.label--color-twitter {
  color: #0077b5;
}
.label--color-twitter svg {
  fill: #0077b5;
}
.label--color-eek-a {
  color: #afc70d;
}
.label--color-eek-a svg {
  fill: #afc70d;
}
.label--color-eek-a1 {
  color: #58ab32;
}
.label--color-eek-a1 svg {
  fill: #58ab32;
}
.label--color-eek-a2 {
  color: #019039;
}
.label--color-eek-a2 svg {
  fill: #019039;
}
.label--color-eek-b {
  color: #fdea14;
}
.label--color-eek-b svg {
  fill: #fdea14;
}
.label--color-eek-c {
  color: #fdcb00;
}
.label--color-eek-c svg {
  fill: #fdcb00;
}
.label--color-eek-d {
  color: #f19305;
}
.label--color-eek-d svg {
  fill: #f19305;
}
.label--color-eek-e {
  color: #e0071b;
}
.label--color-eek-e svg {
  fill: #e0071b;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.link {
  display: inline-block;
  padding: 0;
  margin: 0;
  background-color: transparent;
  color: #fecc00;
  cursor: pointer;
}
.link:hover {
  text-decoration: underline;
}
.link--success {
  color: #019039;
}
.link--success-light {
  color: #abd18b;
}
.link--warning {
  color: #e89c30;
}
.link--alert {
  color: #e32213;
}
.link--info {
  color: #fecc00;
}
.link--neutral {
  color: #929292;
}
.link--small {
  font-size: 0.9333333333rem;
}
.link--alt {
  -webkit-transition: color 250ms ease-in-out;
  transition: color 250ms ease-in-out;
}
.link--alt:hover {
  text-decoration: none;
  color: rgb(49.8355263158, 49.8355263158, 51.1644736842);
}
.link[disabled], .link--disabled {
  color: #1a171b;
  cursor: not-allowed;
}
.link[disabled]:hover, .link--disabled:hover {
  color: #1a171b;
  text-decoration: none;
}
.link--icon {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  color: #b2b2b2;
  font-size: 0.8666666667rem;
  font-weight: 500;
  line-height: 1.0666666667rem;
}
@media only screen and (min-width: 1024px) {
  .link--icon {
    -webkit-transition: color 250ms ease-in-out;
    transition: color 250ms ease-in-out;
  }
}
.link--icon:hover, .link--icon:focus {
  text-decoration: none;
  color: #929292;
}
.link--icon:hover .icon, .link--icon:focus .icon {
  color: #929292;
}
.link--footer {
  color: #b2b2b2;
  line-height: 2rem;
}
.link--footer:hover, .link--footer:focus {
  color: #929292;
}
.link--checkout {
  font-size: 0.8666666667rem;
  line-height: normal;
}
.link--social {
  color: #929292;
}
.link--social:hover, .link--social:focus {
  color: #b2b2b2;
}
.link--privacy {
  color: #fff;
}
.link--privacy:hover, .link--privacy:focus {
  color: #4b4b4d;
}
.link--action {
  color: #4b4b4d;
}
.link--action:hover, .link--action:focus {
  color: #929292;
}
.link--link {
  color: #4b4b4d;
  text-decoration: underline;
}
.link--link:hover, .link--link:focus {
  color: #4b4b4d;
  background-color: rgba(255, 255, 255, 0);
  text-decoration: none;
}
.link--link-bg-alt {
  color: #fff;
}
.link--link-bg-alt:hover, .link--link-bg-alt:focus {
  color: #fff;
  background-color: #4b4b4d;
}
.link--error-block {
  text-decoration: underline;
  font: 400 1rem/2rem "Lato", sans-serif;
  color: #fff;
}
.link--company-user {
  color: #b2b2b2;
  white-space: nowrap;
}
@media only screen and (min-width: 1024px) {
  .link--company-user {
    -webkit-transition: color 250ms ease-in-out;
    transition: color 250ms ease-in-out;
  }
}
.link--company-user:focus, .link--company-user:hover {
  text-decoration: none;
  color: #6f6f6f;
}
.link--secondary {
  color: #fff;
}
@media only screen and (min-width: 1024px) {
  .link--secondary {
    -webkit-transition: color 250ms ease-in-out;
    transition: color 250ms ease-in-out;
  }
}
.link--secondary:hover {
  text-decoration: none;
  color: #fecc00;
}
.link--alternative {
  color: #000;
}
@media only screen and (min-width: 1024px) {
  .link--alternative {
    -webkit-transition: color 250ms ease-in-out;
    transition: color 250ms ease-in-out;
  }
}
.link--alternative:focus, .link--alternative:hover {
  text-decoration: none;
  color: #b2b2b2;
}
.link--additional {
  color: #fecc00;
}
@media only screen and (min-width: 1024px) {
  .link--additional {
    -webkit-transition: color 250ms ease-in-out;
    transition: color 250ms ease-in-out;
  }
}
.link--additional:focus, .link--additional:hover {
  text-decoration: none;
  color: #929292;
}
.link--to-button {
  width: 100%;
  padding: 0.7333333333rem;
  font-size: 0.9333333333rem;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  border-radius: 10px;
  border: 0.0666666667rem solid #ececec;
}
@media only screen and (min-width: 768px) {
  .link--to-button {
    width: auto;
    border: 0;
    -webkit-box-pack: start;
        -ms-flex-pack: start;
            justify-content: flex-start;
    padding: 0;
    font-size: 0.8666666667rem;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.list__item {
  display: block;
}
.list__item > .list {
  margin-left: 0.5rem;
}
.list--inline {
  display: inline-block;
}
.list--inline > .list__item {
  display: inline-block;
  margin: 0 0.5rem;
}
.list--inline > .list__item:first-child {
  margin-left: 0;
}
.list--inline > .list__item:last-child {
  margin-right: 0;
}
.list--bullet .list__item::before {
  content: "•";
  margin-right: 0.25rem;
}
.list--plus .list__item::before {
  content: "+";
  margin-right: 0.25rem;
}
.list--alert {
  color: #e32213;
}
.list--footer {
  padding: 0 1.3333333333rem;
  margin-bottom: 1.7333333333rem;
  display: table;
}
@media only screen and (min-width: 550px) {
  .list--footer {
    padding: 0;
    margin-bottom: 0;
  }
}
.list--checkout {
  margin-bottom: 0;
}
.list--checkout > .list__item {
  margin-left: 1.2666666667rem;
  margin-right: 1.2666666667rem;
}
@media only screen and (min-width: 550px) {
  .list--checkout > .list__item {
    margin-left: 0.6666666667rem;
    margin-right: 0.6666666667rem;
  }
}
.list--checkbox {
  margin: 0.5333333333rem 0;
}
.list__item--inline {
  display: inline-block;
}
.list__item--checkbox {
  margin-bottom: 0.5333333333rem;
}
.list__item:hover {
  color: #fecc00;
}
.list--company-user {
  position: absolute;
  top: 100%;
  right: 0;
  font-size: 1rem;
  font-weight: 400;
  line-height: 2.0666666667rem;
  letter-spacing: 0.0133333333rem;
  border-radius: 0 0 10px 10px;
  background-color: #fff;
  -webkit-box-shadow: 0 1.2rem 1.2rem 0 rgba(26, 23, 27, 0.05), 0 0.2rem 0.2rem 0 rgba(26, 23, 27, 0.05);
          box-shadow: 0 1.2rem 1.2rem 0 rgba(26, 23, 27, 0.05), 0 0.2rem 0.2rem 0 rgba(26, 23, 27, 0.05);
  padding: 1.4rem 2.5333333333rem 1.4rem 1.9333333333rem;
  -webkit-transform-origin: top right;
          transform-origin: top right;
  -webkit-transform: scale(0);
          transform: scale(0);
  z-index: 10;
  -webkit-transition: -webkit-transform 250ms ease-in-out;
  transition: -webkit-transform 250ms ease-in-out;
  transition: transform 250ms ease-in-out;
  transition: transform 250ms ease-in-out, -webkit-transform 250ms ease-in-out;
}
@media only screen and (min-width: 1400px) {
  .list--company-user {
    -webkit-transform-origin: top left;
            transform-origin: top left;
    left: 0;
    right: auto;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.checkbox {
  display: inline-block;
}
.checkbox__container {
  cursor: pointer;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-flow: row nowrap;
          flex-flow: row nowrap;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  position: relative;
}
.checkbox__box {
  -webkit-transition: background-color 250ms ease-in-out, border-color 250ms ease-in-out;
  transition: background-color 250ms ease-in-out, border-color 250ms ease-in-out;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  width: 1.4666666667rem;
  height: 1.4666666667rem;
  border: 0.0666666667rem solid #d0d0d0;
  background-color: #fff;
  margin-right: 0.6666666667rem;
  text-align: center;
  border-radius: 0.1333333333rem;
  -webkit-box-flex: 0;
      -ms-flex: none;
          flex: none;
}
.checkbox__box svg {
  width: 1rem;
  height: 1rem;
}
@media only screen and (min-width: 768px) {
  .checkbox__box {
    margin-right: 0.9333333333rem;
    width: 1.4666666667rem;
    height: 1.4666666667rem;
  }
}
.checkbox__box--filter {
  width: 1.6rem;
  height: 1.6rem;
  line-height: 1.6rem;
}
@media only screen and (min-width: 768px) {
  .checkbox__box--filter {
    width: 1.125rem;
    height: 1.125rem;
    line-height: 1.125rem;
  }
}
.checkbox__box--shopping-list {
  position: static;
  z-index: 1;
}
@media only screen and (min-width: 768px) {
  .checkbox__box--shopping-list {
    position: static;
    margin-right: 0.6666666667rem;
  }
}
.checkbox__box--alternative {
  border: solid 0.1333333333rem #d0d0d0;
}
.checkbox__input {
  pointer-events: none;
  opacity: 0;
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  position: absolute;
  top: 0;
  width: 1.4666666667rem;
  height: 1.4666666667rem;
}
.checkbox__input:checked ~ .checkbox__box {
  background-color: #fff;
  color: #4b4b4d;
  /* stylelint-disable-next-line max-nesting-depth */
}
.checkbox__input:checked ~ .checkbox__box svg {
  fill: #4b4b4d;
}
.checkbox__input:checked ~ .checkbox__box .checkbox__check {
  pointer-events: all;
  visibility: visible;
  opacity: 1;
}
.checkbox__input:checked ~ .checkbox__box--alternative {
  background-color: #fff;
  border-color: #d0d0d0;
}
.checkbox__input:checked ~ .checkbox__label {
  /* stylelint-disable-next-line max-nesting-depth */
}
.checkbox__input:checked ~ .checkbox__label--alternative {
  font-weight: 400;
}
.checkbox__input:focus ~ .checkbox__box {
  -webkit-box-shadow: 0 0 0 3px #fecc00;
          box-shadow: 0 0 0 3px #fecc00;
}
.checkbox__input[disabled] ~ .checkbox__box, .checkbox__input[disabled] ~ .checkbox__box:hover, .checkbox__input--disabled ~ .checkbox__box, .checkbox__input--disabled ~ .checkbox__box:hover {
  background-color: #fff;
  border-color: #ececec;
  cursor: not-allowed;
}
.checkbox__input[disabled]:checked ~ .checkbox__box, .checkbox__input--disabled:checked ~ .checkbox__box {
  background-color: #ececec;
}
.checkbox__input[disabled] ~ .checkbox__label, .checkbox__input--disabled ~ .checkbox__label {
  color: #d0d0d0;
  cursor: not-allowed;
}
.checkbox__check {
  pointer-events: none;
  visibility: hidden;
  opacity: 0;
  -webkit-transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  color: #4b4b4d;
  vertical-align: baseline;
  line-height: 0.9333333333rem;
}
.checkbox__check--alternative {
  color: #d0d0d0;
  margin-bottom: 0.1333333333rem;
}
.checkbox__label {
  display: inline-block;
  vertical-align: middle;
  text-transform: none;
  font-size: 0.9333333333rem;
  font-weight: 400;
  margin: 0;
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
  -ms-flex-preferred-size: auto;
      flex-basis: auto;
}
.checkbox__label--filter {
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  font-size: 0.9333333333rem;
  font-weight: 400;
  text-transform: none;
  margin-bottom: 0;
}
.checkbox__label--alternative {
  margin-bottom: 0;
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.3333333333rem;
  color: #d0d0d0;
  text-transform: none;
}
.checkbox__counter {
  padding-left: 0.5333333333rem;
}
.checkbox--expand {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.checkbox--filter {
  width: 100%;
  font-size: 1rem;
  line-height: 1.2rem;
}
@media only screen and (min-width: 768px) {
  .checkbox--filter {
    font-size: 0.9333333333rem;
  }
}
.checkbox--alternative {
  margin-bottom: 1rem;
}
.checkbox--alternative:hover .checkbox__box--alternative {
  border-color: #d0d0d0;
}
@media only screen and (min-width: 768px) {
  .checkbox--pdp {
    margin-left: 8.8rem;
  }
}
.checkbox--pdp:hover .checkbox__box--alternative {
  border-color: #d0d0d0;
}
.checkbox--error .checkbox__box {
  border-color: #e32213;
}
.checkbox:hover .checkbox__box {
  border-color: #fecc00;
}
.checkbox:hover .checkbox__input[disabled] ~ .checkbox__box,
.checkbox:hover .checkbox__input--disabled ~ .checkbox__box {
  border-color: #ececec;
}
@media only screen and (max-width: 767px) {
  .checkbox.tooltip-position-left-lg .tooltip-button__tooltip {
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .checkbox.tooltip-position-left-lg .tooltip-button__tooltip::after {
    right: 4%;
  }
  .checkbox.tooltip-position-left-lg .tooltip-button__tooltip-container {
    left: auto;
    -webkit-transform: none;
            transform: none;
  }
}

.radio {
  display: inline-block;
}
.radio__container {
  cursor: pointer;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-flow: row nowrap;
          flex-flow: row nowrap;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  position: relative;
}
.radio__box {
  -webkit-transition: background-color 250ms ease-in-out, border-color 250ms ease-in-out;
  transition: background-color 250ms ease-in-out, border-color 250ms ease-in-out;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  width: 1.4666666667rem;
  height: 1.4666666667rem;
  border: 0.0666666667rem solid #d0d0d0;
  background-color: #fff;
  margin-right: 0.6666666667rem;
  text-align: center;
  border-radius: 0.1333333333rem;
  -webkit-box-flex: 0;
      -ms-flex: none;
          flex: none;
}
.radio__box svg {
  width: 1rem;
  height: 1rem;
}
@media only screen and (min-width: 768px) {
  .radio__box {
    margin-right: 0.9333333333rem;
    width: 1.4666666667rem;
    height: 1.4666666667rem;
  }
}
.radio__box--filter {
  width: 1.6rem;
  height: 1.6rem;
  line-height: 1.6rem;
}
@media only screen and (min-width: 768px) {
  .radio__box--filter {
    width: 1.125rem;
    height: 1.125rem;
    line-height: 1.125rem;
  }
}
.radio__box--shopping-list {
  position: static;
  z-index: 1;
}
@media only screen and (min-width: 768px) {
  .radio__box--shopping-list {
    position: static;
    margin-right: 0.6666666667rem;
  }
}
.radio__box--alternative {
  border: solid 0.1333333333rem #d0d0d0;
}
.radio__input {
  pointer-events: none;
  opacity: 0;
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  position: absolute;
  top: 0;
  width: 1.4666666667rem;
  height: 1.4666666667rem;
}
.radio__input:checked ~ .radio__box {
  background-color: #fff;
  color: #4b4b4d;
  /* stylelint-disable-next-line max-nesting-depth */
}
.radio__input:checked ~ .radio__box svg {
  fill: #4b4b4d;
}
.radio__input:checked ~ .radio__box .radio__check {
  pointer-events: all;
  visibility: visible;
  opacity: 1;
}
.radio__input:checked ~ .radio__box--alternative {
  background-color: #fff;
  border-color: #d0d0d0;
}
.radio__input:checked ~ .radio__label {
  /* stylelint-disable-next-line max-nesting-depth */
}
.radio__input:checked ~ .radio__label--alternative {
  font-weight: 400;
}
.radio__input:focus ~ .radio__box {
  -webkit-box-shadow: 0 0 0 3px #fecc00;
          box-shadow: 0 0 0 3px #fecc00;
}
.radio__input[disabled] ~ .radio__box, .radio__input[disabled] ~ .radio__box:hover, .radio__input--disabled ~ .radio__box, .radio__input--disabled ~ .radio__box:hover {
  background-color: #fff;
  border-color: #ececec;
  cursor: not-allowed;
}
.radio__input[disabled]:checked ~ .radio__box, .radio__input--disabled:checked ~ .radio__box {
  background-color: #ececec;
}
.radio__input[disabled] ~ .radio__label, .radio__input--disabled ~ .radio__label {
  color: #d0d0d0;
  cursor: not-allowed;
}
.radio__check {
  pointer-events: none;
  visibility: hidden;
  opacity: 0;
  -webkit-transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  color: #4b4b4d;
  vertical-align: baseline;
  line-height: 0.9333333333rem;
}
.radio__check--alternative {
  color: #d0d0d0;
  margin-bottom: 0.1333333333rem;
}
.radio__label {
  display: inline-block;
  vertical-align: middle;
  text-transform: none;
  font-size: 0.9333333333rem;
  font-weight: 400;
  margin: 0;
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
  -ms-flex-preferred-size: auto;
      flex-basis: auto;
}
.radio__label--filter {
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  font-size: 0.9333333333rem;
  font-weight: 400;
  text-transform: none;
  margin-bottom: 0;
}
.radio__label--alternative {
  margin-bottom: 0;
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.3333333333rem;
  color: #d0d0d0;
  text-transform: none;
}
.radio__counter {
  padding-left: 0.5333333333rem;
}
.radio--expand {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.radio--filter {
  width: 100%;
  font-size: 1rem;
  line-height: 1.2rem;
}
@media only screen and (min-width: 768px) {
  .radio--filter {
    font-size: 0.9333333333rem;
  }
}
.radio--alternative {
  margin-bottom: 1rem;
}
.radio--alternative:hover .radio__box--alternative {
  border-color: #d0d0d0;
}
@media only screen and (min-width: 768px) {
  .radio--pdp {
    margin-left: 8.8rem;
  }
}
.radio--pdp:hover .radio__box--alternative {
  border-color: #d0d0d0;
}
.radio--error .radio__box {
  border-color: #e32213;
}
.radio:hover .radio__box {
  border-color: #fecc00;
}
.radio:hover .radio__input[disabled] ~ .radio__box,
.radio:hover .radio__input--disabled ~ .radio__box {
  border-color: #ececec;
}
@media only screen and (max-width: 767px) {
  .radio.tooltip-position-left-lg .tooltip-button__tooltip {
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .radio.tooltip-position-left-lg .tooltip-button__tooltip::after {
    right: 4%;
  }
  .radio.tooltip-position-left-lg .tooltip-button__tooltip-container {
    left: auto;
    -webkit-transform: none;
            transform: none;
  }
}
.radio--mobile-small .radio__box {
  width: 1rem;
  height: 1rem;
  line-height: 1.5;
}
.radio__box {
  -webkit-transition: border-color 250ms ease-in-out;
  transition: border-color 250ms ease-in-out;
  border-radius: 100%;
  border-width: 0.1333333333rem;
}
.radio__check {
  display: none;
}
.radio__label {
  color: #4b4b4d;
  font-weight: 400;
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .radio__label {
    -ms-flex-negative: 0;
        flex-shrink: 0;
    -ms-flex-preferred-size: auto;
        flex-basis: auto;
  }
}
.radio__input:checked ~ .radio__box {
  background-color: #4b4b4d;
  -webkit-box-shadow: inset 0 0 0 0.32rem #fff;
          box-shadow: inset 0 0 0 0.32rem #fff;
  /* stylelint-disable-next-line declaration-no-important */
  border-width: 1px !important;
  border-color: #d0d0d0;
}
.radio__input:checked ~ .radio__label {
  font-weight: 400;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.select {
  -webkit-transition: border-color 250ms ease-in-out;
  transition: border-color 250ms ease-in-out;
  display: inline-block;
  position: relative;
  max-width: 100%;
  background-color: #fff;
  border: 1px solid #d0d0d0;
  border-radius: 0;
  border-radius: 10px;
  border-color: #d0d0d0;
  color: #4b4b4d;
  padding-right: 1.3333333333rem;
  font-size: 0.9333333333rem;
  height: 3.3333333333rem;
}
.select__select {
  display: block;
  max-width: 100%;
  padding-left: 0.25rem;
  background-color: rgba(255, 255, 255, 0);
  border: 0.25rem solid rgba(255, 255, 255, 0);
  border-right-width: 1.5rem;
  border-radius: 0;
  z-index: 2;
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
}
.select__select::-ms-expand {
  display: none;
}
.select__select[disabled], .select__select--disabled {
  background-color: #f4f4f4;
  cursor: not-allowed;
}
.select__caret {
  position: absolute;
  top: 0;
  bottom: 0;
  right: 0.25rem;
  margin: auto;
  color: #777777;
  z-index: 1;
  pointer-events: none;
}
.select--expand, .select--expand .select__select {
  display: block;
  width: 100%;
}
.select--naked {
  background-color: rgba(255, 255, 255, 0);
  border: none;
}
.select--error {
  border-color: #e32213;
}
.select--error .select__caret {
  color: #e32213;
}
.select__select {
  height: 100%;
}
.select__caret {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  font-size: 1.3333333333rem;
  right: 1rem;
}
.select__caret svg {
  width: 1.3333333333rem;
  height: 1.3333333333rem;
}
.select--quick-order-page {
  padding: 1rem 0.6666666667rem;
  background-color: #1a171b;
  border-radius: 10px;
  color: #b2b2b2;
}
.select--quick-order-page:hover {
  cursor: pointer;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.table thead {
  background-color: #ececec;
  color: #4b4b4d;
  font-size: 0.9333333333rem;
}
.table thead svg {
  fill: #4b4b4d;
}
.table th {
  color: #4b4b4d;
}
.table th,
.table td {
  padding: 1rem;
  text-align: left;
}
@media only screen and (min-width: 768px) {
  .table th,
  .table td {
    padding-left: 1.5rem;
    padding-right: 1.5rem;
  }
}
.table tbody {
  font-size: 0.9333333333rem;
}
@media only screen and (max-width: 767px) {
  .table tbody tr {
    border: 0.0666666667rem solid #ececec;
  }
}
@media only screen and (min-width: 768px) {
  .table tbody tr:not(:first-child) {
    border-top: 0.0666666667rem solid #ececec;
  }
}
.table tbody th {
  font-weight: 500;
}
.table tbody td {
  color: #4b4b4d;
}
.table tbody strong {
  color: #4b4b4d;
  font-weight: 500;
}
.table--expand {
  width: 100%;
}
.table__row--inactive {
  color: #d0d0d0;
}
.table--grid thead {
  white-space: nowrap;
}
.table--grid th {
  padding: 0.5rem 1rem;
}
.table--grid td {
  padding: 1.0666666667rem 1rem;
}
@media only screen and (max-width: 767px) {
  .table--responsive {
    display: block;
  }
  .table--responsive thead,
  .table--responsive tbody,
  .table--responsive th,
  .table--responsive td {
    display: block;
    text-transform: capitalize;
  }
  .table--responsive thead tr,
  .table--responsive thead th {
    display: none;
  }
  .table--responsive tr {
    padding-top: 15px;
    padding-bottom: 15px;
  }
  .table--responsive tbody tr:not(.is-hidden-sm-md) {
    display: block;
  }
  .table--responsive td {
    padding-top: 0;
    padding-bottom: 0;
  }
  .table--responsive td::before {
    font-weight: 700;
    display: inline-block;
    width: auto;
    padding-right: 0.6666666667rem;
    text-transform: uppercase;
    -ms-flex-negative: 0;
        flex-shrink: 0;
  }
  .table--responsive .row {
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .table--responsive .row--order-details {
    border-width: 1px;
    border-style: solid;
    border-color: #ececec;
    padding: 1rem;
    position: relative;
    margin-bottom: 1rem;
  }
}
@media only screen and (max-width: 767px) and (min-width: 768px) {
  .table--responsive .row--order-details {
    padding: 0;
    border: none;
    margin-bottom: 0;
  }
}
@media only screen and (max-width: 767px) {
  .table--responsive .transform-table-header,
  .table--responsive .transform-table-header__cell {
    display: block;
    padding: 0;
    background: #fff;
  }
  .table--responsive .transform-table-header__cell {
    font-size: 1.2rem;
    font-weight: 500;
    padding-top: 1.0666666667rem;
  }
  .table--responsive .transform-cell {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    position: relative;
    color: #4b4b4d;
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
}
@media only screen and (max-width: 767px) and (min-width: 768px) {
  .table--responsive .transform-cell {
    display: table-cell;
  }
}
@media only screen and (max-width: 767px) {
  .table--responsive .transform-cell::before {
    content: attr(data-content) ":";
  }
  .table--responsive .transform-cell--alt {
    padding: 0;
    background-color: rgba(255, 255, 255, 0);
  }
  .table--responsive .transform-cell--no-label::before {
    display: none;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.textarea {
  border: 1px solid #d0d0d0;
  border-radius: 10px;
  color: #4b4b4d;
  padding: 0.9333333333rem 1.3333333333rem;
  font-size: 0.9333333333rem;
  width: 100%;
}
.textarea--error {
  border-color: #e32213;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.thumbnail--smaller {
  min-height: 3.4666666667rem;
}
@media only screen and (min-width: 768px) {
  .thumbnail--smaller {
    min-height: 2.8rem;
  }
}
.thumbnail--small {
  min-height: 5rem;
}
.thumbnail--big {
  min-height: 20rem;
}
.thumbnail--bigger {
  min-height: 30rem;
}
.thumbnail--min-size {
  min-width: 2.5rem;
}
.thumbnail--reset-indents {
  margin: 0;
}
.thumbnail--category-list {
  min-height: 20.8666666667rem;
}
@media only screen and (min-width: 550px) {
  .thumbnail--category-list {
    min-height: 10rem;
  }
}
.thumbnail--catalog {
  min-height: 12rem;
}
@media only screen and (min-width: 768px) {
  .thumbnail--catalog {
    min-height: 15rem;
  }
}
.thumbnail--category {
  min-height: 8.2666666667rem;
}
@media only screen and (min-width: 768px) {
  .thumbnail--category {
    min-height: 15rem;
  }
}
.thumbnail--shopping-list {
  min-height: 5rem;
}
@media only screen and (min-width: 768px) {
  .thumbnail--shopping-list {
    min-height: 10rem;
  }
}
.thumbnail--cart {
  min-height: 5rem;
  margin: 0;
}
@media only screen and (min-width: 768px) {
  .thumbnail--cart {
    min-height: 10.6666666667rem;
    margin: 0.5333333333rem;
  }
}
.thumbnail--summary {
  min-height: 5rem;
  margin: 0;
}
@media only screen and (min-width: 768px) {
  .thumbnail--summary {
    min-height: 6.6666666667rem;
    margin: 0.2666666667rem;
  }
}
.thumbnail--has-border {
  border: 0.25rem solid rgba(255, 255, 255, 0);
  -webkit-box-shadow: 0 0 0 1px #f0f0f0;
          box-shadow: 0 0 0 1px #f0f0f0;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.title--footer {
  width: 100%;
  position: relative;
  text-transform: uppercase;
  color: #fff;
  font-size: 1rem;
  line-height: 3rem;
  padding: 0 1.3333333333rem;
}
@media only screen and (min-width: 550px) {
  .title--footer {
    font-weight: 700;
    line-height: 2.2666666667rem;
    padding: 0;
  }
}
.title--footer .icon--caret-up {
  display: none;
}
.title--footer.active .icon--caret {
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.title--footer.active .icon--caret-up {
  display: inline-block;
}
@media only screen and (min-width: 768px) {
  .title--footer.active .icon--caret-up {
    display: none;
  }
}
.title--footer.active .icon--caret-down {
  display: none;
}
@media only screen and (min-width: 768px) {
  .title--lg-lh-initial {
    line-height: initial;
  }
}
.title--footer-logo {
  margin-bottom: 0;
}
@media only screen and (min-width: 550px) {
  .title--footer-logo {
    display: none;
  }
}
.title--subscription {
  font: 700 1.0666666667rem/3.3333333333rem "Lato", sans-serif;
  position: relative;
}
@media only screen and (min-width: 550px) {
  .title--subscription {
    font-weight: 500;
    font-size: 1.2rem;
    line-height: normal;
  }
}
@media only screen and (min-width: 768px) {
  .title--subscription {
    font-size: 1.7333333333rem;
  }
}
@media only screen and (min-width: 1024px) {
  .title--subscription {
    font-size: 2.2666666667rem;
    line-height: 2.8666666667rem;
    letter-spacing: 0.02rem;
  }
}
.title--checkout {
  font-size: 1.2rem;
  font-weight: 700;
  margin-bottom: 0.5rem;
}
.title--second {
  font-size: 1.2rem;
  margin-bottom: 0.9333333333rem;
}
@media only screen and (min-width: 768px) {
  .title--second {
    font-size: 1.6rem;
  }
}
.title__index {
  color: #fecc00;
  margin-right: 0.2666666667rem;
}
@media only screen and (min-width: 768px) {
  .title__index {
    margin-right: 0.5333333333rem;
  }
}
.title--sub {
  color: #b2b2b2;
  font-weight: 400;
  margin-bottom: 0.8rem;
}
.title--error-page {
  font: 700 2.1333333333rem/2.7333333333rem "Lato", sans-serif;
  margin-bottom: 0.4666666667rem;
}
.title--product-review {
  margin: 2.4rem 0 1.6rem;
}
.title--product-slider {
  text-align: center;
  font-size: 1.8666666667rem;
  margin-bottom: 1.0666666667rem;
}
@media only screen and (min-width: 768px) {
  .title--product-slider {
    margin-bottom: 2.2rem;
    font-size: 2.1333333333rem;
  }
}
.title--top-margin {
  margin-top: 4.0666666667rem;
}
@media only screen and (min-width: 768px) {
  .title--top-margin {
    margin-top: 5.3333333333rem;
  }
}
@media only screen and (min-width: 1024px) {
  .title--top-margin {
    margin-top: 7.3333333333rem;
  }
}
.title--top-margin-small {
  margin-top: 3.6666666667rem;
}
.title--light {
  color: #fff;
}
.title--product-set-details {
  font-size: 1.4666666667rem;
  font-weight: 500;
}
@media only screen and (min-width: 768px) {
  .title--product-set-details {
    font-size: 3.3333333333rem;
  }
}
.title--mobile-toggler-section {
  margin-bottom: 1.6rem;
  font-weight: 500;
  line-height: normal;
  color: #6f6f6f;
}
@media only screen and (max-width: 767px) {
  .title--mobile-toggler-section {
    font-size: 1.1333333333rem;
    padding-left: 1.9333333333rem;
    position: relative;
  }
  .title--mobile-toggler-section::before, .title--mobile-toggler-section::after {
    content: "";
    position: absolute;
    left: 0;
    top: 50%;
    -webkit-transform: translateY(-50%);
            transform: translateY(-50%);
    width: 0.6666666667rem;
    height: 0.1333333333rem;
    background: #6f6f6f;
  }
  .title--mobile-toggler-section::after {
    -webkit-transform: translateY(-50%) rotate(90deg);
            transform: translateY(-50%) rotate(90deg);
  }
  .title--mobile-toggler-section.active::after {
    display: none;
  }
}
.title--link {
  color: #6f6f6f;
  font-weight: 500;
}
@media only screen and (min-width: 768px) {
  .title--link {
    margin-left: 1.3333333333rem;
  }
}
.title--warning {
  color: #4b4b4d;
  line-height: 3.4666666667rem;
  background-color: rgba(75, 75, 77, 0.1);
  margin: 0 -1rem 0.5333333333rem;
}
@media only screen and (min-width: 768px) {
  .title--warning {
    font-size: 1.0666666667rem;
    margin: 0 0 0.5333333333rem;
  }
}
.title--review-subtitle {
  margin-bottom: 1.3333333333rem;
  font-size: 1.2rem;
  font-weight: 500;
  line-height: normal;
  color: #6f6f6f;
  text-align: center;
}
@media only screen and (min-width: 768px) {
  .title--review-subtitle {
    text-align: left;
    font-size: 1.6rem;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.action-bar {
  margin-top: 1.0666666667rem;
  margin-bottom: 1.0666666667rem;
}
@media only screen and (min-width: 550px) {
  .action-bar {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-flow: row nowrap;
            flex-flow: row nowrap;
  }
}
.action-bar--first {
  margin-top: 0;
}
.action-bar--big {
  margin-top: 3.2rem;
}
.action-bar--small {
  margin-top: 1.0666666667rem;
  margin-bottom: 0.5333333333rem;
}
@media only screen and (min-width: 550px) {
  .action-bar--narrow {
    max-width: 46.6666666667rem;
  }
}
@media only screen and (min-width: 1024px) {
  .action-bar--narrow {
    max-width: 33.3333333333rem;
  }
}
.action-bar__title {
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
}
.action-bar__title--small {
  font-size: 1.2rem;
  line-height: 1.6;
}
.action-bar__title--middle {
  font-size: 1.4666666667rem;
}
@media only screen and (min-width: 550px) {
  .action-bar__actions {
    -webkit-box-flex: 0;
        -ms-flex: none;
            flex: none;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-flow: row nowrap;
            flex-flow: row nowrap;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
  }
}
.action-bar__action {
  margin-top: 0.5rem;
}
@media only screen and (min-width: 550px) {
  .action-bar__action {
    margin-top: 0;
    margin-left: 0.5333333333rem;
    width: auto;
  }
}
.action-bar__icon {
  display: block;
  width: 0.8666666667rem;
  height: 0.8666666667rem;
  margin-right: 0.6666666667rem;
  -webkit-box-flex: 0;
      -ms-flex: none;
          flex: none;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.ajax-add-to-cart__button {
  height: 100%;
  white-space: nowrap;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.ajax-loader {
  -webkit-transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  padding: 0.5rem;
  background-color: rgba(240, 240, 240, 0.5);
  z-index: 750;
  background: rgba(255, 255, 255, 0.6);
}
.ajax-loader__spinner {
  -webkit-animation-name: spin-to;
          animation-name: spin-to;
  -webkit-animation-duration: 1s;
          animation-duration: 1s;
  -webkit-animation-iteration-count: infinite;
          animation-iteration-count: infinite;
  -webkit-animation-timing-function: linear;
          animation-timing-function: linear;
}
.ajax-loader__label {
  margin-left: 0.5rem;
}
.ajax-loader--solid-bg {
  background-color: #fff;
}
.ajax-loader--big .ajax-loader__label {
  font-size: 2.4rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.alert {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: start;
      -ms-flex-align: start;
          align-items: flex-start;
  padding: 1.25rem 1rem;
  margin: 0.5rem 0;
  background: #eaf1fa;
  color: #333333;
}
.alert__icon {
  color: #0064b4;
  -ms-flex-negative: 0;
      flex-shrink: 0;
  margin: 0 1rem 0 0;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.autocomplete-form {
  position: relative;
}
.autocomplete-form__field {
  position: relative;
  z-index: 702;
}
.autocomplete-form__input {
  padding: 1rem 2.4rem 1rem 1.2rem;
  border: none;
  font-size: 1rem;
  font-weight: 400;
  border-radius: 10px;
  -webkit-box-shadow: 0 18px 18px 0 rgba(75, 75, 77, 0.2), 0 3px 3px 0 rgba(75, 75, 77, 0.2);
          box-shadow: 0 18px 18px 0 rgba(75, 75, 77, 0.2), 0 3px 3px 0 rgba(75, 75, 77, 0.2);
}
.autocomplete-form__input--active {
  border-radius: 10px 10px 0 0;
}
.autocomplete-form__suggestion {
  margin: 0;
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  background-color: #fff;
  padding: 0.6666666667rem 1.2rem;
  font-size: 0.9333333333rem;
  line-height: 2;
  border-radius: 0 0 10px 10px;
  -webkit-box-shadow: 0 18px 18px 0 rgba(75, 75, 77, 0.2), 0 3px 3px 0 rgba(75, 75, 77, 0.2);
          box-shadow: 0 18px 18px 0 rgba(75, 75, 77, 0.2), 0 3px 3px 0 rgba(75, 75, 77, 0.2);
  max-height: 30rem;
  overflow-x: hidden;
  z-index: 703;
}
.autocomplete-form__clean-button {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  padding-right: 0.8rem;
}
.autocomplete-form__clean-button svg {
  width: 1.3333333333rem;
  height: 1.3333333333rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.breadcrumb-step {
  display: inline-block;
  font-family: "Lato", sans-serif;
  font-size: 0.9333333333rem;
  cursor: pointer;
  color: #b2b2b2;
  -webkit-transition: color 250ms ease-in-out;
  transition: color 250ms ease-in-out;
  -ms-word-break: break-all;
  word-break: break-all;
  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
  word-break: break-word;
  -ms-hyphens: auto;
      hyphens: auto;
}
.breadcrumb-step:last-child .breadcrumb-step__link {
  font-weight: 700;
  color: #000;
}
.breadcrumb-step:last-child .breadcrumb-step__link:hover {
  color: #fecc00;
}
.breadcrumb-step--progress-step, .breadcrumb-step--progress-complete {
  font-size: 0.6666666667rem;
  line-height: normal;
  margin: 0 1rem;
  position: relative;
}
@media only screen and (max-width: 549px) {
  .breadcrumb-step--progress-step, .breadcrumb-step--progress-complete {
    min-height: 2.9333333333rem;
  }
  .breadcrumb-step--progress-step .breadcrumb-step__link, .breadcrumb-step--progress-complete .breadcrumb-step__link {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
  }
}
@media only screen and (min-width: 550px) {
  .breadcrumb-step--progress-step, .breadcrumb-step--progress-complete {
    font-size: 1.2rem;
  }
}
@media only screen and (min-width: 768px) {
  .breadcrumb-step--progress-step, .breadcrumb-step--progress-complete {
    margin: 0 1.9333333333rem;
  }
}
.breadcrumb-step--progress-step:not(:last-child)::after, .breadcrumb-step--progress-complete:not(:last-child)::after {
  content: "";
  position: absolute;
  left: 100%;
  top: 0.4rem;
  width: 2.4rem;
  margin-left: -0.2rem;
  height: 0.0666666667rem;
  background: rgba(208, 208, 208, 0.8);
}
@media only screen and (min-width: 550px) {
  .breadcrumb-step--progress-step:not(:last-child)::after, .breadcrumb-step--progress-complete:not(:last-child)::after {
    height: 0.1333333333rem;
    top: 0.8rem;
  }
}
@media only screen and (min-width: 768px) {
  .breadcrumb-step--progress-step:not(:last-child)::after, .breadcrumb-step--progress-complete:not(:last-child)::after {
    display: none;
  }
}
.breadcrumb-step--progress-step.breadcrumb-step--active, .breadcrumb-step--progress-complete.breadcrumb-step--active {
  border-bottom: 0;
}
@media only screen and (min-width: 768px) {
  .breadcrumb-step--progress-step.breadcrumb-step--active, .breadcrumb-step--progress-complete.breadcrumb-step--active {
    border-bottom: 0.0666666667rem solid #929292;
  }
}
.breadcrumb-step--progress-complete {
  color: #fecc00;
}
.breadcrumb-step--progress-complete:not(:last-child)::after {
  background: #fecc00;
}
.breadcrumb-step--progress-complete .breadcrumb-step__link {
  color: inherit;
}
@media only screen and (min-width: 768px) {
  .breadcrumb-step--progress-complete .breadcrumb-step__link {
    margin-left: 0.2666666667rem;
  }
}
.breadcrumb-step--progress-complete .breadcrumb-step__number {
  display: none;
}
.breadcrumb-step__separator {
  margin-left: 0.2666666667rem;
  margin-right: 0.2666666667rem;
  color: #b2b2b2;
}
.breadcrumb-step__cart svg {
  width: 1.6666666667rem;
  height: 1.6666666667rem;
}
.breadcrumb-step--active {
  font-weight: 500;
  border-bottom: 0.0666666667rem solid #929292;
  color: #929292;
}
.breadcrumb-step__checked {
  width: 0.8666666667rem;
  height: 0.8666666667rem;
  line-height: 0.7333333333rem;
  background-color: #fecc00;
  color: #fff;
  border-radius: 50%;
  margin-bottom: 0.1333333333rem;
}
@media only screen and (min-width: 550px) {
  .breadcrumb-step__checked {
    width: 1.2rem;
    height: 1.2rem;
    line-height: 1rem;
    margin: 0.2rem 0 0.2666666667rem;
  }
}
@media only screen and (min-width: 768px) {
  .breadcrumb-step__checked {
    margin: 0 0 0 0.2666666667rem;
  }
}
.breadcrumb-step__number {
  display: block;
  margin-bottom: 0.1333333333rem;
}
@media only screen and (min-width: 768px) {
  .breadcrumb-step__number {
    display: inline;
    margin-bottom: 0;
  }
}
.breadcrumb-step__holder {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: reverse;
      -ms-flex-direction: column-reverse;
          flex-direction: column-reverse;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
@media only screen and (min-width: 768px) {
  .breadcrumb-step__holder {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
  }
}
.breadcrumb-step--progress-complete:first-child .breadcrumb-step__holder .breadcrumb-step__link::before {
  display: none;
}

.breadcrumb-step:last-child .breadcrumb-step__link {
  font-weight: 400;
}
.breadcrumb-step:last-child .breadcrumb-step__link:hover {
  color: #000;
}

.breadcrumb-button__label {
  font-size: 0.8rem;
}
@media only screen and (min-width: 768px) {
  .breadcrumb-button__label {
    font-size: 1.2rem;
  }
}
.breadcrumb-button--cursor-default {
  cursor: default;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.card {
  position: relative;
}
.card__container {
  position: relative;
  padding-bottom: 2.5rem;
}
.card__actions-container {
  position: absolute;
  bottom: 0.5rem;
  left: 0.5rem;
  right: 0.5rem;
  margin: auto;
}
.card--stretch {
  height: 100%;
}
.card__container--category-list-item {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.cart-counter__content {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  height: 2.5333333333rem;
}
@media only screen and (min-width: 768px) {
  .cart-counter__content {
    -webkit-box-align: start;
        -ms-flex-align: start;
            align-items: flex-start;
  }
}
.cart-counter__label {
  display: none;
}
@media only screen and (min-width: 768px) {
  .cart-counter__label {
    display: inline;
  }
}
.cart-counter__label--mobile {
  display: block;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  padding-left: 0.2666666667rem;
  padding-right: 0.1333333333rem;
}
@media only screen and (min-width: 768px) {
  .cart-counter__label--mobile {
    display: none;
  }
}
@media only screen and (min-width: 768px) {
  .cart-counter__quantity {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    min-width: 1.0666666667rem;
    height: 1.0666666667rem;
    background: #fecc00;
    border-radius: 10px;
    color: #fff;
    text-align: center;
    font-size: 0.7333333333rem;
    font-weight: 700;
    line-height: 1.0666666667rem;
    margin: 0.6666666667rem 0 0 0.4rem;
  }
}
.cart-counter__quantity::before {
  content: "(";
}
.cart-counter__quantity::after {
  content: ")";
}
@media only screen and (min-width: 768px) {
  .cart-counter__quantity::before, .cart-counter__quantity::after {
    display: none;
  }
}
.cart-counter__quantity--hidden {
  display: none;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.cart-items-counter {
  height: 100%;
}
.cart-items-counter__text {
  display: none;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
@media only screen and (min-width: 550px) {
  .cart-items-counter__text {
    display: inline;
    white-space: normal;
  }
}
.cart-items-counter__quantity {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  width: 1.4666666667rem;
  height: 1.4666666667rem;
  background-color: #4b4b4d;
  border-radius: 10px;
  border-radius: 9999px;
  color: #fff;
  text-align: center;
  font-size: 0.7333333333rem;
  font-weight: 700;
  position: absolute;
  top: 0.25rem;
  right: -0.75rem;
}
@media only screen and (min-width: 375px) {
  .cart-items-counter__quantity {
    margin: 0;
    right: -0.6666666667rem;
  }
}
@media only screen and (min-width: 550px) {
  .cart-items-counter__quantity {
    right: 0;
  }
}
@media only screen and (min-width: 768px) {
  .cart-items-counter__quantity {
    right: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .cart-items-counter__quantity {
    top: 0;
    right: 0.75rem;
  }
}
.cart-items-counter:hover .cart-items-counter__quantity {
  background-color: #fecc00;
  color: #000;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.flash-message {
  pointer-events: none;
  visibility: hidden;
  opacity: 0;
  -webkit-transition: visibility 500ms ease-in-out, opacity 500ms ease-in-out, max-height 500ms ease-in-out;
  transition: visibility 500ms ease-in-out, opacity 500ms ease-in-out, max-height 500ms ease-in-out;
  max-height: 0;
  overflow-y: hidden;
  font-size: 15px1;
  font-family: "Lato", sans-serif;
  background-color: #fecc00;
}
.flash-message__content {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  width: 100%;
}
.flash-message__content::after {
  display: none;
}
.flash-message__text {
  padding-right: 1rem;
}
.flash-message__static-link {
  color: rgba(111, 111, 111, 0.4);
  -ms-flex-negative: 0;
      flex-shrink: 0;
}
.flash-message__message {
  padding: 1.25rem 1rem;
  color: #fff;
}
.flash-message--show {
  pointer-events: all;
  visibility: visible;
  opacity: 1;
  max-height: 8rem;
}
.flash-message--info {
  color: #000;
}
.flash-message--success {
  background-color: #019039;
}
.flash-message--success-light {
  background-color: #abd18b;
}
.flash-message--warning {
  background-color: #e89c30;
}
.flash-message--alert {
  background-color: #e32213;
}
.flash-message--info {
  background-color: #fecc00;
}
.flash-message--neutral {
  background-color: #929292;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.form .form {
  padding-left: 0.5rem;
  padding-right: 0.5rem;
}
.form__fields {
  margin-left: -0.5rem;
  margin-right: -0.5rem;
}
.form__field {
  padding: 0.5rem;
}
.form__actions {
  text-align: right;
}
.form__action {
  margin-top: 0.5rem;
  margin-left: 0.5rem;
}
.form--inline .form__container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-flow: row wrap;
          flex-flow: row wrap;
  -webkit-box-align: end;
      -ms-flex-align: end;
          align-items: flex-end;
}
.form--inline .form__fields {
  float: left;
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  -ms-flex-preferred-size: auto;
      flex-basis: auto;
}
.form--inline .form__actions {
  -webkit-box-flex: 0;
      -ms-flex-positive: 0;
          flex-grow: 0;
  -ms-flex-preferred-size: auto;
      flex-basis: auto;
}
.form--inline .form__field {
  padding-bottom: 0;
  padding-right: 0;
}
.form--extend {
  width: 100%;
}

+ .form__field {
  margin-top: 0.5rem;
}
.form__field--section {
  margin-top: 3.2rem;
  width: 100%;
}
.form--reverse-actions .form__actions {
  -webkit-box-orient: horizontal;
  -webkit-box-direction: reverse;
      -ms-flex-flow: row-reverse;
          flex-flow: row-reverse;
}
.form--spread-actions .form__actions {
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  width: 100%;
}
.form--right-actions .form__actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  width: 100%;
}
@media only screen and (min-width: 550px) {
  .form--right-actions .form__actions {
    -webkit-box-pack: end;
        -ms-flex-pack: end;
            justify-content: flex-end;
  }
}
.form__actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-flow: row wrap;
          flex-flow: row wrap;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  text-align: center;
}
@media only screen and (min-width: 768px) {
  .form__actions {
    margin-top: 1.0666666667rem;
    -ms-flex-wrap: wrap;
        flex-wrap: wrap;
  }
}
.form__action {
  -webkit-box-flex: 0;
      -ms-flex: none;
          flex: none;
  width: 100%;
  margin: 0.6666666667rem 0 0 0;
}
@media only screen and (min-width: 768px) {
  .form__action {
    width: auto;
  }
}
@media only screen and (min-width: 550px) {
  .form__action--expand-sm-md {
    width: auto;
    margin: 0.6666666667rem 1.0666666667rem 0 0;
  }
}
@media only screen and (min-width: 768px) {
  .form__action--expand-sm-md {
    margin-top: 0;
  }
}
.form__action--primary {
  -webkit-box-ordinal-group: 0;
      -ms-flex-order: -1;
          order: -1;
}
.form__action--sm-lg-first {
  -webkit-box-ordinal-group: 0;
      -ms-flex-order: -1;
          order: -1;
}
@media only screen and (min-width: 768px) {
  .form__action--sm-lg-first {
    -webkit-box-ordinal-group: 1;
        -ms-flex-order: 0;
            order: 0;
  }
}
.form__action--sm-md-first {
  -webkit-box-ordinal-group: 0;
      -ms-flex-order: -1;
          order: -1;
}
@media only screen and (min-width: 550px) {
  .form__action--sm-md-first {
    -webkit-box-ordinal-group: 1;
        -ms-flex-order: 0;
            order: 0;
  }
}
.form__action--link {
  width: auto;
  margin: 0.6666666667rem auto 0;
  font-size: 0.8666666667rem;
  text-decoration: underline;
}
@media only screen and (min-width: 768px) {
  .form__action--link {
    margin: 0 1.0666666667rem 0 0;
    font-size: 1.0666666667rem;
    text-decoration: none;
  }
}
.form__title-description {
  color: #d0d0d0;
  margin: -0.5333333333rem 0 1.0666666667rem;
}
.form--narrow .form__container {
  width: 100%;
}
@media only screen and (min-width: 550px) {
  .form--narrow .form__container {
    max-width: 46.6666666667rem;
  }
}
@media only screen and (min-width: 1024px) {
  .form--narrow .form__container {
    max-width: 33.3333333333rem;
  }
}
.form--subscription {
  padding-bottom: 2.1333333333rem;
}
@media only screen and (min-width: 550px) {
  .form--subscription {
    padding-bottom: 0;
  }
}
.form--subscription .form__container {
  position: relative;
}
.form--subscription .form__fields,
.form--subscription .form__actions,
.form--subscription .form__action {
  margin: 0;
}
.form--subscription .form__field {
  padding: 0;
}
.form--subscription .form__actions {
  position: absolute;
  right: 0;
  bottom: 0;
}
.form--subscription .label {
  display: none;
}
.form--subscription .input {
  border-radius: 0;
  border: none;
  border-bottom: 2px solid #929292;
  background-color: rgba(255, 255, 255, 0);
  font-size: 1.0666666667rem;
  line-height: 1.3333333333rem;
  letter-spacing: 0.0133333333rem;
  color: #929292;
  padding: 0.6666666667rem 2.4rem 0.6666666667rem 0;
}
.form--subscription .input::-webkit-input-placeholder {
  color: #929292;
}
.form--subscription .input::-moz-placeholder {
  color: #929292;
}
.form--subscription .input:-ms-input-placeholder {
  color: #929292;
}
.form--subscription .input::-ms-input-placeholder {
  color: #929292;
}
.form--subscription .input::placeholder {
  color: #929292;
}
@media only screen and (min-width: 768px) {
  .form--subscription .input {
    font-size: 1.2rem;
    line-height: 1.5333333333rem;
    letter-spacing: 0.018rem;
    padding: 0.8666666667rem 3.0666666667rem 1.0666666667rem 0;
  }
}
.form--subscription .button {
  color: #929292;
  min-height: 2.8rem;
  padding-right: 0.6666666667rem;
  padding-bottom: 0.6666666667rem;
}
.form--subscription .button:hover, .form--subscription .button:focus {
  color: #b2b2b2;
}
@media only screen and (min-width: 768px) {
  .form--subscription .button {
    min-height: 3.6rem;
    padding-right: 1.4666666667rem;
    padding-bottom: 0.6666666667rem;
  }
}
.form--subscription .icon {
  width: 0.8rem;
  height: 0.8rem;
}
@media only screen and (min-width: 768px) {
  .form--subscription .icon {
    width: 1.0666666667rem;
    height: 1.0666666667rem;
  }
}
.form--browse-file .form__field:not(:first-of-type),
.form--browse-file .form__actions,
.form--browse-file .input {
  display: none;
}
.form--text-order .form__field {
  padding-top: 0;
}
.form--text-order .form__actions {
  display: none;
}
.form--text-order .textarea {
  min-height: 7.9333333333rem;
  padding: 1.1333333333rem 1.3333333333rem 1.2rem;
  font-size: 0.8666666667rem;
  font-weight: 400;
  color: #b2b2b2;
  border-radius: 10px;
  border: none;
  -webkit-box-shadow: 0 0.6666666667rem 0.6666666667rem 0 rgba(75, 75, 77, 0.2), 0 0.2rem 0.2rem 0 rgba(75, 75, 77, 0.2);
          box-shadow: 0 0.6666666667rem 0.6666666667rem 0 rgba(75, 75, 77, 0.2), 0 0.2rem 0.2rem 0 rgba(75, 75, 77, 0.2);
}
@media only screen and (min-width: 768px) {
  .form--text-order .textarea {
    min-height: 5.7333333333rem;
    padding: 1rem 1.3333333333rem;
  }
}
.form__required-note {
  font-size: 0.9333333333rem;
  color: #d0d0d0;
  width: 100%;
  margin: 0.5rem 0;
  display: inline-block;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.jumbotron {
  overflow: hidden;
}
.jumbotron__container {
  height: 24rem;
  background-color: #fecc00;
  background-position: center center;
  background-size: cover;
  background-repeat: no-repeat;
  text-align: center;
  position: relative;
  padding: 0 1rem;
}
@media only screen and (min-width: 550px) {
  .jumbotron__container {
    padding-left: 2.6666666667rem;
    padding-right: 2.6666666667rem;
  }
}
@media only screen and (min-width: 768px) {
  .jumbotron__container {
    height: 30.3333333333rem;
    text-align: left;
    padding-left: 5.8666666667rem;
    padding-right: 5.8666666667rem;
  }
}
.jumbotron__title, .jumbotron__text {
  color: #fff;
}
.jumbotron__title {
  font-size: 2.2666666667rem;
  line-height: 2.5333333333rem;
  font-weight: 500;
  margin-bottom: 1.8rem;
  letter-spacing: -0.02rem;
  text-shadow: 0 10px 30px rgba(0, 0, 0, 0.2), 0 2px 4px rgba(0, 0, 0, 0.2);
}
@media only screen and (min-width: 768px) {
  .jumbotron__title {
    font-size: 2.8rem;
    line-height: 3.0666666667rem;
    letter-spacing: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .jumbotron__title {
    font-size: 3.3333333333rem;
    line-height: 3.2rem;
  }
}
.jumbotron__text {
  padding: 0 0.8rem;
  font-size: 1.0666666667rem;
  line-height: 1.3333333333rem;
  font-weight: 400;
  letter-spacing: 0.0273333333rem;
  text-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
  margin-bottom: 1.7333333333rem;
}
@media only screen and (min-width: 768px) {
  .jumbotron__text {
    padding: 0;
    font-size: 1.2rem;
    line-height: 1.4666666667rem;
  }
}
@media only screen and (min-width: 1024px) {
  .jumbotron__text {
    font-size: 1.4666666667rem;
    line-height: 1.8666666667rem;
    margin-bottom: 3.2rem;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.lazy-image {
  line-height: 1;
}
.lazy-image--thumbnail {
  position: relative;
  height: 10rem;
  margin: 0.5rem;
}
.lazy-image--smaller {
  height: 3rem;
}
.lazy-image--small {
  height: 5rem;
}
.lazy-image--big {
  height: 20rem;
}
.lazy-image--bigger {
  height: 30rem;
}
.lazy-image--expand {
  width: 100%;
}
.lazy-image--min-size {
  min-width: 2.5rem;
}
.lazy-image--has-border {
  border: 0.25rem solid rgba(255, 255, 255, 0);
  -webkit-box-shadow: 0 0 0 1px #f0f0f0;
          box-shadow: 0 0 0 1px #f0f0f0;
}
.lazy-image--spaceless {
  margin: 0;
}
.lazy-image--with-overlay {
  position: relative;
  overflow: hidden;
}
.lazy-image--with-overlay::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba(0, 0, 0, 0.05);
  z-index: 1;
}
.lazy-image--background {
  position: relative;
}
.lazy-image__image--thumbnail {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  margin: auto;
  max-width: 100%;
  max-height: 100%;
}
.lazy-image__image--color-light {
  color: #dadada;
}
.lazy-image__background {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-position: center;
  background-size: cover;
}
.lazy-image--smaller {
  height: 3.4666666667rem;
}
@media only screen and (min-width: 768px) {
  .lazy-image--smaller {
    height: 2.8rem;
  }
}
.lazy-image--configured-bundle {
  margin: 0.5333333333rem 1.0666666667rem 0.5333333333rem 0;
  padding: 0.5333333333rem;
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
}
.lazy-image--configured-bundle::before {
  border-radius: 10px 0 0 10px;
}
.lazy-image--category-list {
  height: 20.8666666667rem;
}
@media only screen and (min-width: 550px) {
  .lazy-image--category-list {
    height: 10.6666666667rem;
  }
}
.lazy-image--catalog {
  height: 12rem;
}
@media only screen and (min-width: 768px) {
  .lazy-image--catalog {
    height: 16rem;
  }
}
.lazy-image--category {
  height: 8.2666666667rem;
}
@media only screen and (min-width: 768px) {
  .lazy-image--category {
    height: 16rem;
  }
}
.lazy-image--shopping-list {
  height: 5rem;
}
@media only screen and (min-width: 768px) {
  .lazy-image--shopping-list {
    height: 10.6666666667rem;
  }
}
.lazy-image--cart {
  height: 5rem;
  margin: 0;
}
@media only screen and (min-width: 768px) {
  .lazy-image--cart {
    height: 10.6666666667rem;
    margin: 0.5333333333rem;
  }
}
.lazy-image--summary {
  height: 5rem;
  margin: 0;
}
@media only screen and (min-width: 768px) {
  .lazy-image--summary {
    height: 6.6666666667rem;
    margin: 0.2666666667rem;
  }
}
.lazy-image--full-size {
  height: 100%;
  width: 100%;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.lazy-image--category-list-item {
  height: auto;
  margin: 0.5333333333rem;
}
@media only screen and (min-width: 768px) {
  .lazy-image--category-list-item {
    height: 6.6666666667rem;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
  }
}
.lazy-image__content {
  position: relative;
  line-height: 1.5;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.menu__item {
  display: block;
}
.menu__item > .menu {
  margin-left: 0.5rem;
}
.menu--inline {
  display: inline-block;
}
.menu--inline > .menu__item {
  display: inline-block;
  margin: 0 0.5rem;
}
.menu--inline > .menu__item:first-child {
  margin-left: 0;
}
.menu--inline > .menu__item:last-child {
  margin-right: 0;
}
.menu--bullet .menu__item::before {
  content: "•";
  margin-right: 0.25rem;
}
.menu--plus .menu__item::before {
  content: "+";
  margin-right: 0.25rem;
}
.menu--alert {
  color: #e32213;
}
.menu__link, .menu__text {
  -webkit-transition: color 250ms ease-in-out;
  transition: color 250ms ease-in-out;
  position: relative;
  letter-spacing: 0.0133333333rem;
  z-index: 1;
}
@media only screen and (min-width: 1024px) {
  .menu__link, .menu__text {
    white-space: nowrap;
  }
}
.menu__text {
  cursor: context-menu;
}
.menu .sale-color .menu__link,
.menu .sale-color .menu__text {
  color: #4b4b4d;
}
.menu .sale-color .menu__link:hover,
.menu .sale-color .menu__text:hover {
  color: #fff;
}
.menu .new-color .menu__link,
.menu .new-color .menu__text {
  color: #fecc00;
}
.menu .new-color .menu__link:hover,
.menu .new-color .menu__text:hover {
  color: #fecc00;
}
.menu__item--filter-enumeration {
  line-height: 1.2rem;
  margin-bottom: 0.6666666667rem;
}
.menu__item--filter-enumeration .checkbox,
.menu__item--filter-enumeration .radio {
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.menu__item--filter-enumeration .checkbox__label,
.menu__item--filter-enumeration .radio__label {
  color: #4b4b4d;
}
.menu__item--filter-enumeration .checkbox__counter,
.menu__item--filter-enumeration .radio__counter {
  color: #929292;
}
.menu__item--footer {
  margin: 1.0666666667rem 0.5333333333rem 0;
}
@media only screen and (min-width: 768px) {
  .menu__item--footer {
    margin-top: 0;
  }
}
.menu__item--social {
  margin: 0 0.5333333333rem;
}
.menu__item--social:first-child {
  margin-left: 0;
}
.menu__item--social:last-child {
  margin-right: 0;
}
.menu--footer {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  margin: 0 -0.5333333333rem 1.7333333333rem;
  padding: 0 1.3333333333rem;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
}
@media only screen and (min-width: 550px) {
  .menu--footer {
    margin-bottom: 0;
    -ms-flex-wrap: nowrap;
        flex-wrap: nowrap;
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
    padding: 0;
  }
}
.menu--social {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  margin-bottom: 1.7333333333rem;
}
@media only screen and (min-width: 768px) {
  .menu--social {
    -webkit-box-pack: left;
        -ms-flex-pack: left;
            justify-content: left;
  }
}
.menu__trigger {
  display: block;
  position: relative;
  padding-right: 1.8rem;
}
@media only screen and (min-width: 1024px) {
  .menu__trigger {
    position: static;
    padding-right: 0;
  }
}
.menu__trigger-button {
  position: absolute;
  height: 100%;
  width: 1.8rem;
  right: 0;
  top: 0;
  line-height: 0;
  background: none;
  z-index: 0;
}
@media only screen and (min-width: 1024px) {
  .menu__trigger-button {
    width: 1.3333333333rem;
    right: -1.3333333333rem;
    display: none;
    background: none;
  }
}
.menu__trigger-button-icon {
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%) rotate(-90deg);
          transform: translate(-50%, -50%) rotate(-90deg);
}
@media only screen and (min-width: 1024px) {
  .menu__trigger-button-icon {
    color: #b2b2b2;
    margin-top: 0.1333333333rem;
    -webkit-transform: translate(-50%, -50%);
            transform: translate(-50%, -50%);
  }
}
.menu__trigger-button.is-active .menu__trigger-button-icon {
  -webkit-transform: translate(-50%, -50%) rotate(-180deg);
          transform: translate(-50%, -50%) rotate(-180deg);
}
@media only screen and (min-width: 1024px) {
  .menu--lvl-0 {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    position: relative;
  }
  .menu--lvl-0 .menu__divider {
    border-left-width: 1px;
    border-style: solid;
    border-color: #d0d0d0;
    height: 1.5333333333rem;
    width: 0.0666666667rem;
  }
}
@media only screen and (min-width: 1024px) {
  .menu .showed .menu__link--lvl-0,
  .menu .showed .menu__text--lvl-0 {
    -webkit-transition: color 250ms ease-in-out;
    transition: color 250ms ease-in-out;
    background-color: #4b4b4d;
    color: #fff;
    border-top-left-radius: 10px;
    border-top-right-radius: 10px;
    text-align: center;
  }
  .menu .showed .menu__link--lvl-0 svg,
  .menu .showed .menu__text--lvl-0 svg {
    fill: #fff;
  }
}
@media only screen and (min-width: 1024px) {
  .menu .showed .menu__link--slvtec {
    -webkit-transition: color 250ms ease-in-out;
    transition: color 250ms ease-in-out;
    background-color: #01a3ec;
    color: #fff;
    border-top-left-radius: 10px;
    border-top-right-radius: 10px;
    text-align: center;
  }
  .menu .showed .menu__link--slvtec svg {
    fill: #fff;
  }
}
.menu__item--lvl-0 {
  padding-left: 0.7333333333rem;
  border-bottom: solid 0.0666666667rem #ececec;
  z-index: 2;
}
@media only screen and (min-width: 1024px) {
  .menu__item--lvl-0 {
    -webkit-box-flex: 1;
        -ms-flex: auto;
            flex: auto;
    padding-left: 0;
    border: none;
  }
}
@media only screen and (min-width: 1024px) {
  .menu__item--lvl-0.showed .menu-wrapper--lvl-1 {
    opacity: 1;
    -webkit-transform: scaleY(1);
            transform: scaleY(1);
    pointer-events: initial;
    z-index: 400;
    -webkit-transition-delay: 0.1s;
            transition-delay: 0.1s;
  }
}
@media only screen and (min-width: 1024px) {
  .menu__item--lvl-0:not(.showed) .menu-wrapper--lvl-1 {
    -webkit-transition-delay: 0.5s;
            transition-delay: 0.5s;
  }
}
.menu__item--lvl-0:last-of-type {
  border: none;
}
@media only screen and (min-width: 1024px) {
  .menu__item--lvl-0.menu__item--has-children-dropdown::after {
    content: "";
    position: absolute;
    left: 50%;
    bottom: -1.6666666667rem;
    -webkit-transform: rotate(45deg) translateX(-50%);
            transform: rotate(45deg) translateX(-50%);
    width: 0.6666666667rem;
    height: 0.6666666667rem;
    border-radius: 10px;
    background: #fff;
    -webkit-transition: helper-effect-transition(opacity, 100ms);
    transition: helper-effect-transition(opacity, 100ms);
    opacity: 0;
  }
}
.menu__link--lvl-0, .menu__text--lvl-0 {
  display: block;
  font-size: 1rem;
  font-weight: 400;
  color: #4b4b4d;
  text-transform: uppercase;
  line-height: 3rem;
}
@media only screen and (min-width: 1024px) {
  .menu__link--lvl-0, .menu__text--lvl-0 {
    -webkit-transition: color 250ms ease-in-out;
    transition: color 250ms ease-in-out;
    text-align: center;
  }
  .menu__link--lvl-0:hover, .menu__text--lvl-0:hover {
    background-color: #4b4b4d;
    color: #fff;
    border-top-left-radius: 10px;
    border-top-right-radius: 10px;
  }
  .menu__link--lvl-0:hover svg, .menu__text--lvl-0:hover svg {
    fill: #fff;
  }
}
.menu__link--slvtec {
  display: block;
  font-size: 1rem;
  font-weight: 400;
  color: #4b4b4d;
  text-transform: none;
  line-height: 3rem;
}
@media only screen and (min-width: 1024px) {
  .menu__link--slvtec {
    -webkit-transition: color 250ms ease-in-out;
    transition: color 250ms ease-in-out;
    text-align: center;
  }
  .menu__link--slvtec:hover {
    background-color: #01a3ec;
    color: #fff;
    border-top-left-radius: 10px;
    border-top-right-radius: 10px;
  }
  .menu__link--slvtec:hover svg {
    fill: #fff;
  }
}
@media only screen and (min-width: 1024px) {
  .is-touch .menu__trigger-button--lvl-0 {
    display: block;
  }
}
@media only screen and (min-width: 1024px) {
  .menu-wrapper--lvl-1 {
    -webkit-transition: -webkit-transform 250ms ease-in-out;
    transition: -webkit-transform 250ms ease-in-out;
    transition: transform 250ms ease-in-out;
    transition: transform 250ms ease-in-out, -webkit-transform 250ms ease-in-out;
    left: 0;
    width: 100%;
    position: absolute;
    top: 100%;
    -webkit-transform-origin: top;
            transform-origin: top;
    -webkit-transform: scaleY(0);
            transform: scaleY(0);
  }
}
.menu--lvl-1 {
  padding-bottom: 0.8rem;
}
@media only screen and (min-width: 1024px) {
  .menu--lvl-1 {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    padding: 1.2666666667rem 1.3333333333rem 1.4rem;
    background-color: #fff;
    border-radius: 10px;
    -webkit-box-shadow: 0 1.2rem 1.2rem 0 rgba(75, 75, 77, 0.2), 0 0.2rem 0.2rem 0 rgba(75, 75, 77, 0.2);
            box-shadow: 0 1.2rem 1.2rem 0 rgba(75, 75, 77, 0.2), 0 0.2rem 0.2rem 0 rgba(75, 75, 77, 0.2);
  }
}
@media only screen and (min-width: 1400px) {
  .menu--lvl-1 {
    padding: 2.5333333333rem 2.6rem 2.8666666667rem;
  }
}
@media only screen and (min-width: 1024px) {
  .menu__item--lvl-1:not(:last-child) {
    margin-right: 1.0666666667rem;
  }
}
@media only screen and (min-width: 1200px) {
  .menu__item--lvl-1:not(:last-child) {
    margin-right: 4.6666666667rem;
  }
}
.menu__link--lvl-1, .menu__text--lvl-1 {
  display: block;
  font-size: 1.0666666667rem;
  line-height: 2.8rem;
  letter-spacing: 0.0133333333rem;
  color: #6f6f6f;
}
@media only screen and (min-width: 1024px) {
  .menu__link--lvl-1, .menu__text--lvl-1 {
    display: inline-block;
    font-size: 1.1333333333rem;
    font-weight: 700;
    line-height: normal;
    letter-spacing: 0;
    color: #929292;
  }
}
.menu__link--lvl-1:hover {
  color: #b2b2b2;
}
.menu__trigger-button--lvl-1 {
  color: #d0d0d0;
}
.menu__trigger-button--lvl-1.is-active::after {
  content: "";
  position: absolute;
  left: 50%;
  -webkit-transform: translateX(-50%);
          transform: translateX(-50%);
  top: 0;
  width: 66.6rem;
  height: 100%;
  background: #1a171b;
  z-index: -1;
}
@media only screen and (min-width: 1024px) {
  .menu__trigger-button--lvl-1.is-active::after {
    display: none;
  }
}
.menu--lvl-2 {
  padding-bottom: 0.6666666667rem;
}
@media only screen and (min-width: 1024px) {
  .menu--lvl-2 {
    padding-bottom: 0;
    margin-top: 1.2666666667rem;
  }
}
@media only screen and (min-width: 1024px) {
  .menu__item--lvl-2 {
    padding: 0.2rem 0;
  }
}
.menu__link--lvl-2, .menu__text--lvl-2 {
  display: block;
  padding: 0 1.3333333333rem;
  font-size: 1rem;
  line-height: 2.8rem;
  font-weight: 400;
  letter-spacing: 0.0133333333rem;
  color: #b2b2b2;
}
@media only screen and (min-width: 1024px) {
  .menu__link--lvl-2, .menu__text--lvl-2 {
    display: inline-block;
    line-height: normal;
    letter-spacing: 0;
    padding: 0;
  }
}
.menu__link--lvl-2:hover {
  color: #929292;
}
.menu--flex-space-between {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.money-price {
  display: block;
}
.money-price__amount {
  font-size: 2.4rem;
}
.money-price__amount--original {
  font-size: 0.9333333333rem;
  display: block;
  color: #1a171b;
  text-decoration: line-through;
}
.money-price__tag {
  margin-right: 0.25rem;
  color: #4b4b4d;
}
.money-price--big {
  margin-top: 0.8rem;
  margin-bottom: 1.5333333333rem;
}
@media only screen and (min-width: 768px) {
  .money-price--big {
    margin-top: 0;
  }
}
.money-price--medium {
  margin: 0 0 15px;
  width: 100%;
}
.money-price--margin-bottom-from-tablet {
  margin: 0;
}
@media only screen and (min-width: 768px) {
  .money-price--margin-bottom-from-tablet {
    margin: 0 0 15px;
  }
}
@media only screen and (min-width: 768px) {
  .money-price--text-right-from-tablet {
    text-align: right;
  }
}
.money-price--secondary {
  margin-top: 0.5333333333rem;
  padding: 0.9333333333rem 1.0666666667rem;
  background: #1a171b;
}
.money-price__amount {
  font-size: 1.0666666667rem;
  font-weight: 500;
  line-height: 1.2;
  color: #929292;
}
@media only screen and (min-width: 768px) {
  .money-price__amount {
    font-size: 2.4rem;
  }
}
.money-price__amount--big {
  font-size: 1.6rem;
  font-weight: 700;
  line-height: normal;
}
@media only screen and (min-width: 768px) {
  .money-price__amount--big {
    font-size: 1.7333333333rem;
  }
}
.money-price__amount--medium {
  font-size: 1.2rem;
  font-weight: 700;
  line-height: normal;
}
.money-price__amount--gray-color {
  color: #6f6f6f;
}
.money-price__amount--original {
  font-size: 1rem;
  display: inline-block;
  color: #d0d0d0;
  font-weight: 400;
  margin-left: 0.2666666667rem;
}
@media only screen and (min-width: 768px) {
  .money-price__amount--original {
    font-size: 2.4rem;
  }
}
.money-price__amount--block {
  display: block;
}
.money-price__mode {
  color: #d0d0d0;
  font-size: 0.8rem;
  font-weight: 400;
  line-height: 0.9333333333rem;
}
@media only screen and (min-width: 768px) {
  .money-price__mode {
    margin-left: 0.3333333333rem;
    font-size: 0.8rem;
  }
}
.money-price__mode--big {
  font-size: 0.8666666667rem;
  line-height: normal;
}
.money-price__mode--block {
  display: block;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.navigation-icon-list__icon {
  color: #1a171b;
}
.navigation-icon-list--social {
  text-align: center;
}
@media only screen and (min-width: 768px) {
  .navigation-icon-list--social {
    text-align: left;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
navigation-multilevel .js-navigation-multilevel__close {
  background-color: #fff;
  color: #4b4b4d;
  width: 100%;
  border: none;
  border-top: 1px solid #d0d0d0;
  border-radius: 0;
}
navigation-multilevel .js-navigation-multilevel__close svg {
  fill: #4b4b4d;
}
navigation-multilevel .js-navigation-multilevel__close:focus, navigation-multilevel .js-navigation-multilevel__close:hover, navigation-multilevel .js-navigation-multilevel__close:active {
  background-color: #fff;
  border-top: 1px solid #d0d0d0;
  color: #4b4b4d;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.navigation-multiview-list__icon {
  color: #1a171b;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.pagination {
  font-size: 0.9333333333rem;
  text-align: center;
  margin-top: 0.4666666667rem;
  margin-bottom: 1.5rem;
}
@media only screen and (min-width: 768px) {
  .pagination {
    margin-top: 2.6666666667rem;
  }
}
.pagination__list {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
}
.pagination__item--pages-before-ellipsis-index-2, .pagination__item--pages-after-ellipsis-index-2 {
  display: none;
}
@media only screen and (min-width: 550px) {
  .pagination__item--pages-before-ellipsis-index-2, .pagination__item--pages-after-ellipsis-index-2 {
    display: inline-block;
  }
}
.pagination__step {
  -webkit-transition: color 250ms ease-in-out;
  transition: color 250ms ease-in-out;
  display: inline-block;
  min-width: 3rem;
  min-height: 3rem;
  font-size: 1.2rem;
  line-height: 3rem;
}
.pagination__step--button {
  border-width: 1px;
  border-style: solid;
  border-color: #b2b2b2;
  color: #b2b2b2;
  margin: 0 0.5rem;
  font-weight: 700;
}
.pagination__step--button:hover, .pagination__step--button:focus {
  color: #4b4b4d;
}
.pagination__step--current {
  background-color: #ececec;
  color: #4b4b4d;
  border-width: 1px;
  border-style: solid;
  border-color: #ececec;
  color: #4b4b4d;
}
.pagination__step--current svg {
  fill: #4b4b4d;
}
.pagination__step--previous:hover, .pagination__step--previous:focus, .pagination__step--next:hover, .pagination__step--next:focus {
  color: #6f6f6f;
}
.pagination__step--disabled, .pagination__step--disabled:hover, .pagination__step--disabled:focus {
  color: #1a171b;
}
.pagination__step--ellipsis {
  display: none;
}
@media only screen and (min-width: 1024px) {
  .pagination__step--ellipsis {
    display: inline-block;
  }
}
.pagination__step-nav {
  min-width: 2rem;
}
@media only screen and (min-width: 550px) {
  .pagination__step-nav {
    width: inherit;
  }
}
@media only screen and (min-width: 1024px) {
  .pagination__step--first, .pagination__step--last {
    display: none;
  }
}
.pagination--search-cms-results {
  margin-bottom: 4rem;
}
@media only screen and (min-width: 1024px) {
  .pagination--search-cms-results {
    margin-bottom: 7.3333333333rem;
  }
}
.pagination__nav-icon {
  font-size: 1.6666666667rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.password-complexity-indicator__indicator-item {
  display: inline-block;
  width: 3.125rem;
  height: 0.25rem;
  border-radius: 0.125rem;
  margin-right: 0.3125rem;
  background: #f0f0f0;
}
.password-complexity-indicator__indicator-list--weak {
  color: #e32213;
}
.password-complexity-indicator__indicator-list--weak .password-complexity-indicator__indicator-item:nth-child(1) {
  background-color: #e32213;
}
.password-complexity-indicator__indicator-list--weak .password-complexity-indicator__message::before {
  content: attr(data-weak);
}
.password-complexity-indicator__indicator-list--medium {
  color: #e89c30;
}
.password-complexity-indicator__indicator-list--medium .password-complexity-indicator__indicator-item:nth-child(1) {
  background-color: #e89c30;
}
.password-complexity-indicator__indicator-list--medium .password-complexity-indicator__indicator-item:nth-child(2) {
  background-color: #e89c30;
}
.password-complexity-indicator__indicator-list--medium .password-complexity-indicator__message::before {
  content: attr(data-medium);
}
.password-complexity-indicator__indicator-list--strong {
  color: #019039;
}
.password-complexity-indicator__indicator-list--strong .password-complexity-indicator__indicator-item:nth-child(1) {
  background-color: #019039;
}
.password-complexity-indicator__indicator-list--strong .password-complexity-indicator__indicator-item:nth-child(2) {
  background-color: #019039;
}
.password-complexity-indicator__indicator-list--strong .password-complexity-indicator__indicator-item:nth-child(3) {
  background-color: #019039;
}
.password-complexity-indicator__indicator-list--strong .password-complexity-indicator__message::before {
  content: attr(data-strong);
}
.password-complexity-indicator__indicator-list--very-strong {
  color: #019039;
}
.password-complexity-indicator__indicator-list--very-strong .password-complexity-indicator__indicator-item:nth-child(1) {
  background-color: #019039;
}
.password-complexity-indicator__indicator-list--very-strong .password-complexity-indicator__indicator-item:nth-child(2) {
  background-color: #019039;
}
.password-complexity-indicator__indicator-list--very-strong .password-complexity-indicator__indicator-item:nth-child(3) {
  background-color: #019039;
}
.password-complexity-indicator__indicator-list--very-strong .password-complexity-indicator__indicator-item:nth-child(4) {
  background-color: #019039;
}
.password-complexity-indicator__indicator-list--very-strong .password-complexity-indicator__message::before {
  content: attr(data-very-strong);
}
.password-complexity-indicator__message {
  display: inline-block;
  vertical-align: middle;
}
.password-complexity-indicator__additional-message {
  display: none;
  font-size: 0.9333333333rem;
  color: #777777;
}
.password-complexity-indicator__additional-message--weak, .password-complexity-indicator__additional-message--medium, .password-complexity-indicator__additional-message--strong {
  display: block;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.password-field {
  position: relative;
}
.password-field__input {
  padding-right: 1.875rem;
}
.password-field__button {
  position: absolute;
  top: 0;
  right: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  width: 1.875rem;
  height: 100%;
  color: #777777;
  cursor: pointer;
}
.password-field__button:hover {
  color: #333333;
}
.password-field__button--shown .password-field__icon-show {
  display: none;
}
.password-field__button--shown .password-field__icon-hide {
  display: inline-block;
}
.password-field__icon-hide {
  display: none;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.price {
  display: block;
}
.price__amount {
  font-size: 2.4rem;
}
.price__amount--original {
  font-size: 0.9333333333rem;
  display: block;
  color: #1a171b;
  text-decoration: line-through;
}
.price__tag {
  margin-right: 0.25rem;
  color: #4b4b4d;
}
.price--pdp {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  margin: 1rem 0;
}
.price--cart, .price--configurator {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
}
.price--cart-sample, .price--configurator-sample {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: flex-end;
          flex-direction: flex-end;
}
.price--available {
  margin: 0;
}
@media only screen and (min-width: 768px) {
  .price--available {
    margin: 0 0 15px;
  }
}
.price--summary {
  margin: 0;
}
.price__amount-label {
  display: none;
}
.price__amount {
  color: #4b4b4d;
  font-size: initial;
}
.price__amount-value {
  font-weight: 700;
}
.price__amount-value--sale {
  color: #e32213;
}
.price__amount--align-end {
  text-align: end;
}
.price__amount--alt {
  color: #4b4b4d;
}
@media only screen and (min-width: 550px) {
  .price__amount--alt.price__amount--catalog-list {
    margin-left: 0.2666666667rem;
  }
}
.price__amount--sample {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
@media only screen and (min-width: 768px) {
  .price__amount--sample {
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
  }
}
.price__amount--pdp {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  -webkit-box-align: baseline;
      -ms-flex-align: baseline;
          align-items: baseline;
  line-height: normal;
}
.price__amount--pdp .price__amount-value {
  font-size: 2.4rem;
}
.price__amount--pdp .price__amount-label {
  display: inline-block;
  padding-right: 0.5rem;
}
.price__amount--cart, .price__amount--configurator, .price__amount--track-configurator {
  font-size: 1.2rem;
  font-weight: 700;
  line-height: normal;
  color: #6f6f6f;
}
.price__amount--configurator .price__amount-label, .price__amount--track-configurator .price__amount-label {
  display: inline-block;
  font-size: 0.9333333333rem;
  font-weight: 400;
  color: #4b4b4d;
  padding-right: 0.5rem;
}
.price__amount--catalog {
  color: #e32213;
  margin-right: 0rem;
}
.price__amount--original {
  color: #4b4b4d;
  display: inline-block;
  font-weight: 400;
  text-decoration: none;
  font-size: initial;
  margin-right: 0.2666666667rem;
}
.price__amount--original .price__amount-value {
  text-decoration: line-through;
  font-weight: 700;
}
@media only screen and (min-width: 550px) {
  .price__amount--original.price__amount--catalog-list {
    margin-right: 0;
  }
}
.price__amount--original.price__amount--pdp {
  margin-right: 0;
  display: inherit;
}
.price__amount--medium {
  font-size: 1.2rem;
}
.price__amount--outlet {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-align: start;
      -ms-flex-align: start;
          align-items: flex-start;
}
.price__amount--outlet .price__amount-value {
  margin-top: 0.25rem;
}
.price__mode {
  display: block;
  font-size: 1rem;
  font-weight: 400;
  margin-left: 0;
}
.price__mode--align-end {
  text-align: end;
}
.price__mode--pdp {
  line-height: normal;
}
.price__mode--cart, .price__mode--catalog-list, .price__mode--configurator, .price__mode--track-configurator {
  width: 100%;
  padding-top: 0.5rem;
  display: block;
}
.price__mode--block {
  display: block;
}
.price__mode--hide-mode {
  display: none;
}
.price__price-label {
  color: #4b4b4d;
}
.price--product-listing-box {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
}
@media only screen and (max-width: 767px) {
  .price--product-listing-box {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    height: 100%;
  }
}
.price--product-listing-box .price__amount--original .price__amount-value {
  text-decoration: line-through;
  color: #4b4b4d;
}
@media only screen and (max-width: 767px) {
  .price--product-listing-box .price__amount {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    -webkit-box-align: baseline;
        -ms-flex-align: baseline;
            align-items: baseline;
  }
}
.price--product-listing-box .price__amount-label {
  color: #4b4b4d;
  font-size: 0.9333333333rem;
  font-weight: 400;
  display: inline-block;
  padding-right: 0.5rem;
}
@media only screen and (max-width: 767px) {
  .price--product-listing-box .price__amount-label {
    padding-left: 1rem;
  }
}
.price--product-listing-box .price__amount-value {
  font-weight: 700;
  font-size: 1rem;
}
.price--product-listing-box .price__amount-value--sale {
  color: #e32213;
}
@media only screen and (min-width: 768px) {
  .price--product-listing-box .price__amount-value {
    font-size: 1.2rem;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-card {
  position: relative;
}
.product-card__container {
  position: relative;
  padding-bottom: 2.5rem;
}
.product-card__actions-container {
  position: absolute;
  bottom: 0.5rem;
  left: 0.5rem;
  right: 0.5rem;
  margin: auto;
}
.product-card--stretch {
  height: 100%;
}
.product-card__container {
  padding-bottom: 3.5rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-item {
  margin-bottom: 20px;
  margin-bottom: 1.3333333333rem;
  border-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  position: relative;
}
@media only screen and (min-width: 768px) {
  .product-item {
    padding: 0;
    margin-bottom: 1.3333333333rem;
  }
}
.product-item .energy-label {
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  margin-right: 0.6666666667rem;
  font-size: 4rem;
  line-height: 1.1;
}
.product-item__product {
  display: grid;
  grid-template-columns: 33.3333333333% 33.3333333333% 33.3333333333%;
  grid-template-rows: auto;
  /* stylelint-disable-next-line declaration-block-no-redundant-longhand-properties */
  grid-template-areas: "image description description" "delete value value" "note note note";
  padding: 1rem 1rem 0;
}
@media only screen and (min-width: 768px) {
  .product-item__product {
    grid-template-columns: 16.6666666667% 16.6666666667% 16.6666666667% 16.6666666667% 16.6666666667% 16.6666666667%;
    grid-template-areas: "image description description description value value";
  }
}
.product-item__product .product-item__image {
  grid-area: image;
  padding-right: 0.5rem;
}
.product-item__product .product-item__description {
  grid-area: description;
}
.product-item__product .product-item__delete-cart {
  grid-area: delete;
}
.product-item__product .product-item__total {
  grid-area: value;
  text-align: right;
}
.product-item__product .product-item__note {
  grid-area: note;
}
.product-item__total {
  padding: 0.75rem 0;
}
@media only screen and (max-width: 375px) {
  .product-item__total .energy-label {
    width: 100%;
  }
  .product-item__total .price__quantity-holder {
    margin-right: auto;
  }
}
@media only screen and (min-width: 768px) {
  .product-item__total {
    padding: 0;
  }
}
.product-item__total .price__container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  padding: 0.25rem 0;
  margin-left: 0.5rem;
}
@media only screen and (min-width: 768px) {
  .product-item__total .price__container {
    margin-left: 1.5rem;
  }
}
.product-item__total .availability {
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
  margin-top: 0.5rem;
}
.product-item--shopping-list-available {
  padding-bottom: 5rem;
}
@media only screen and (min-width: 768px) {
  .product-item--shopping-list-available {
    padding-bottom: 0;
  }
}
.product-item__title {
  -ms-word-break: break-all;
  word-break: break-all;
  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
  word-break: break-word;
  -ms-hyphens: auto;
      hyphens: auto;
}
.product-item__title--shopping-list-alternative {
  font-size: 0.8rem;
}
@media only screen and (min-width: 768px) {
  .product-item__title--shopping-list-alternative {
    font-size: 1.0666666667rem;
  }
}
.product-item__title--hidden {
  opacity: 0.5;
}
.product-item__color {
  display: inline-block;
  width: 0.9333333333rem;
  height: 0.9333333333rem;
  border-radius: 50%;
  margin-left: 0.2666666667rem;
  text-indent: -666.6rem;
  vertical-align: middle;
}
.product-item__color-preview {
  display: inline-block;
  margin-top: 1rem;
  position: relative;
  font-size: 0.8666666667rem;
  font-weight: 500;
  color: #6f6f6f;
  padding-right: 1.4rem;
  line-height: 1.4rem;
}
@media only screen and (min-width: 768px) {
  .product-item__color-preview {
    margin-top: 0.6666666667rem;
    font-size: 0.9333333333rem;
  }
}
.product-item__color-preview-decoration {
  position: absolute;
  right: 0;
  top: 0.2rem;
  width: 1rem;
  height: 1rem;
  border-radius: 50%;
  border: 0.0666666667rem solid #ececec;
}
.product-item__available {
  display: inline-block;
  color: #fecc00;
  font-weight: 500;
  line-height: normal;
  margin-bottom: 0.5333333333rem;
}
.product-item--fixed-input {
  max-width: 9.2rem;
  margin-bottom: 2rem;
  text-align: right;
}
.product-item--shopping-list-alternative {
  margin-bottom: 0.6666666667rem;
}
.product-item__checkbox {
  height: 100%;
}
.product-item__checkbox-col {
  background-color: rgba(26, 23, 27, 0.05);
  padding-left: 0.8rem;
}
.product-item__checkbox-col--shopping-list {
  position: absolute;
  right: 0;
  top: 0;
  background: rgba(255, 255, 255, 0);
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 768px) {
  .product-item__checkbox-col--shopping-list {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    position: static;
    background-color: rgba(26, 23, 27, 0.05);
    padding-bottom: 1.3333333333rem;
  }
}
.product-item__quantity-holder {
  padding-bottom: 1.0666666667rem;
}
@media only screen and (min-width: 768px) {
  .product-item__quantity-holder {
    padding-bottom: 0;
  }
}
.product-item__quantity {
  margin-top: 0.8666666667rem;
  font-size: 0.8666666667rem;
  color: #929292;
}
@media only screen and (min-width: 768px) {
  .product-item__quantity {
    font-size: 0.9333333333rem;
  }
}
.product-item__quantity-title {
  color: #6f6f6f;
  font-weight: 500;
}
.product-item__delete-cart {
  padding: 1.2rem 0;
}
.product-item__delete-cart .icon {
  font-size: 2.4rem;
  color: #4b4b4d;
}
.product-item__delete-cart .button[disabled],
.product-item__delete-cart .button--disabled,
.product-item__delete-cart .button[disabled]:hover,
.product-item__delete-cart .button--disabled:hover {
  background: inherit;
  color: inherit;
  border: inherit;
}
.product-item__remove-button {
  margin-top: -3.2rem;
}
@media only screen and (min-width: 768px) {
  .product-item__remove-button {
    margin: 0;
  }
}
.product-item__remove-button-text {
  display: none;
}
@media only screen and (min-width: 768px) {
  .product-item__remove-button-text {
    display: inline-block;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-item-list {
  position: relative;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  flex-direction: row;
}
.product-item-list__name {
  font-weight: 700;
  color: #4b4b4d;
}
.product-item-list__actions {
  margin-top: 1rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
}
.product-item-list__actions--spacingless {
  margin-top: 0;
}
.product-item-list__actions-row {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
}
.product-item-list__actions {
  -webkit-box-flex: 0;
      -ms-flex-positive: 0;
          flex-grow: 0;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-list-item {
  position: relative;
}
.product-list-item__container {
  position: relative;
}
.product-list-item__container {
  padding: 0 0.6rem;
  margin-bottom: 2rem;
  border-radius: 10px;
}
@media only screen and (min-width: 550px) {
  .product-list-item__container {
    padding: 0;
    margin-bottom: 1.3333333333rem;
    background-color: rgba(26, 23, 27, 0.05);
  }
}
@media only screen and (min-width: 1024px) {
  .product-list-item__container {
    -webkit-transition: background-color 250ms ease-in-out, -webkit-box-shadow 250ms ease-in-out;
    transition: background-color 250ms ease-in-out, -webkit-box-shadow 250ms ease-in-out;
    transition: box-shadow 250ms ease-in-out, background-color 250ms ease-in-out;
    transition: box-shadow 250ms ease-in-out, background-color 250ms ease-in-out, -webkit-box-shadow 250ms ease-in-out;
  }
  .product-list-item__container:hover {
    -webkit-box-shadow: 0 3px 3px 0 rgba(75, 75, 77, 0.2), 0 18px 18px 0 rgba(75, 75, 77, 0.2);
            box-shadow: 0 3px 3px 0 rgba(75, 75, 77, 0.2), 0 18px 18px 0 rgba(75, 75, 77, 0.2);
    background-color: rgba(255, 255, 255, 0);
  }
}
.product-list-item__image {
  position: relative;
}
@media only screen and (min-width: 550px) {
  .product-list-item__image {
    background-color: #fff;
  }
}
@media only screen and (min-width: 1024px) {
  .product-list-item__image {
    padding: 0.5rem 1.0666666667rem;
  }
}
.product-list-item__content {
  position: relative;
}
@media only screen and (min-width: 550px) {
  .product-list-item__content {
    padding: 2.4666666667rem 0.6666666667rem 4.6666666667rem;
  }
}
@media only screen and (min-width: 768px) {
  .product-list-item__content {
    padding-left: 1.3333333333rem;
    padding-right: 2rem;
  }
}
.product-list-item__total {
  padding-top: 0.6666666667rem;
}
@media only screen and (min-width: 550px) {
  .product-list-item__total {
    text-align: right;
    padding: 2.3333333333rem 2rem 2.3333333333rem 1.2rem;
  }
}
.product-list-item__overlay {
  position: relative;
  display: block;
  padding: 0.5rem 1.0666666667rem;
  margin: 0 -0.6rem 1rem;
}
@media only screen and (min-width: 550px) {
  .product-list-item__overlay {
    position: static;
    padding: 0;
    margin: 0;
  }
}
.product-list-item__overlay::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  right: 0;
  bottom: 0;
  background-color: rgba(26, 23, 27, 0.05);
  z-index: 1;
}
.product-list-item__inner--total {
  -webkit-box-align: start;
      -ms-flex-align: start;
          align-items: flex-start;
}
@media only screen and (min-width: 550px) {
  .product-list-item__inner--total {
    -webkit-box-align: end;
        -ms-flex-align: end;
            align-items: flex-end;
    height: 100%;
  }
}
.product-list-item__name {
  font-weight: 500;
  line-height: normal;
  color: #6f6f6f;
  letter-spacing: 0.0066666667rem;
}
.product-list-item__details {
  display: none;
}
@media only screen and (min-width: 550px) {
  .product-list-item__details {
    display: block;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.quote-status {
  border-radius: 1.0666666667rem;
  padding: 0.2666666667rem 0.5rem;
  font-size: 0.8rem;
  min-width: 6rem;
  text-align: center;
}
.quote-status--waiting {
  background-color: rgba(237.1, 177.952173913, 93.9, 0.5);
  color: rgb(206.1, 130.4304347826, 22.9);
}
.quote-status--approved {
  background-color: rgba(1.3517241379, 194.6482758621, 77.0482758621, 0.3);
  color: rgb(0.6482758621, 93.3517241379, 36.9517241379);
}
.quote-status--declined {
  background-color: rgba(238.5487804878, 71.4390243902, 58.4512195122, 0.3);
  color: rgb(179.9390243902, 26.9512195122, 15.0609756098);
}
.quote-status--small {
  padding: 0 0.5rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.search-form {
  position: relative;
}
.search-form__button {
  position: absolute;
  top: 0;
  width: 2.8666666667rem;
  height: 100%;
  padding: 0;
  border: none;
  background: rgba(255, 255, 255, 0);
  color: #929292;
  z-index: 703;
}
@media only screen and (min-width: 768px) {
  .search-form__button {
    width: 3.7333333333rem;
  }
}
.search-form__button--submit {
  left: 0;
}
.search-form__button--close {
  right: 0;
}
@media only screen and (min-width: 768px) {
  .search-form__button--close {
    display: none;
  }
}
.search-form__button:hover {
  background: rgba(255, 255, 255, 0);
}
.search-form__button:hover .icon {
  color: #b2b2b2;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.simple-carousel__container {
  position: relative;
  padding-left: 1.5rem;
  padding-right: 1.5rem;
}
.simple-carousel__view {
  position: relative;
  max-width: 100%;
  overflow: hidden;
  z-index: 1;
}
.simple-carousel__slider {
  -webkit-transition: -webkit-transform 500ms ease-in-out;
  transition: -webkit-transform 500ms ease-in-out;
  transition: transform 500ms ease-in-out;
  transition: transform 500ms ease-in-out, -webkit-transform 500ms ease-in-out;
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
}
.simple-carousel__dots {
  text-align: center;
  line-height: 0;
}
.simple-carousel__dot {
  display: inline-block;
  padding: 0.25rem;
}
.simple-carousel__dot::before {
  -webkit-transition: background-color 150ms ease-in-out;
  transition: background-color 150ms ease-in-out;
  content: "";
  display: block;
  width: 0.5rem;
  height: 0.5rem;
  background-color: #dadada;
  border-radius: 100%;
}
.simple-carousel__dot:hover::before, .simple-carousel__dot--current::before {
  background-color: #fecc00;
}
.simple-carousel__navigation {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  position: absolute;
  top: 0;
  bottom: 0;
  z-index: 2;
  pointer-events: none;
}
.simple-carousel__navigation--prev {
  left: 0;
}
.simple-carousel__navigation--next {
  right: 0;
}
.simple-carousel__arrow {
  -webkit-transition: color 250ms ease-in-out;
  transition: color 250ms ease-in-out;
  color: #dadada;
  pointer-events: all;
}
.simple-carousel__arrow:hover {
  color: #fecc00;
}
.simple-carousel--inset .simple-carousel__container {
  padding-left: 0;
  padding-right: 0;
}
.simple-carousel--inset .simple-carousel__navigation {
  width: auto;
}
.simple-carousel--inset .simple-carousel__arrow {
  padding: 0.5rem;
  background-color: rgba(244, 244, 244, 0.75);
}
@media only screen and (min-width: 768px) {
  .simple-carousel__navigation {
    pointer-events: none;
    visibility: hidden;
    opacity: 0;
    -webkit-transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
    transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  }
  .simple-carousel:hover .simple-carousel__navigation {
    pointer-events: all;
    visibility: visible;
    opacity: 1;
    pointer-events: none;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.single-button-form__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.single-button-form__button:hover, .single-button-form__button:focus {
  text-decoration: underline;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.status {
  font-size: 0.9333333333rem;
  display: inline-block;
  padding: 0.1rem 0.5rem;
  background-color: rgb(255, 239.7440944882, 177.5);
  color: rgb(203, 163.0393700787, 0);
  border-radius: 1.0666666667rem;
  padding: 0.2666666667rem 1.0666666667rem;
  font-size: 0.8rem;
  text-align: center;
}
.status--hollow {
  border: 1px solid #dadada;
  background: none;
  color: #1a171b;
}
.status--success {
  background-color: rgb(69.7862068966, 253.7137931034, 141.8137931034);
  color: rgb(0.6482758621, 93.3517241379, 36.9517241379);
}
.status--success-light {
  background-color: white;
  color: rgb(144.5555555556, 194.5185185185, 102.4814814815);
}
.status--warning {
  background-color: rgb(249.85, 232.8326086957, 208.65);
  color: rgb(206.1, 130.4304347826, 22.9);
}
.status--alert {
  background-color: rgb(248.3963414634, 181.3170731707, 176.1036585366);
  color: rgb(179.9390243902, 26.9512195122, 15.0609756098);
}
.status--info {
  background-color: rgb(255, 239.7440944882, 177.5);
  color: rgb(203, 163.0393700787, 0);
}
.status--neutral {
  background-color: rgb(235.25, 235.25, 235.25);
  color: rgb(120.5, 120.5, 120.5);
}
.status--in-progress, .status--refunded {
  background-color: rgb(248.3963414634, 181.3170731707, 176.1036585366);
  color: rgb(179.9390243902, 26.9512195122, 15.0609756098);
}
.status--ready, .status--paid, .status--delivered, .status--configured {
  background-color: rgb(69.7862068966, 253.7137931034, 141.8137931034);
  color: rgb(0.6482758621, 93.3517241379, 36.9517241379);
}
.status--waiting, .status--payment-pending, .status--confirmed, .status--sent-to-merchant, .status--shipped-by-merchant, .status--exported, .status--not-configured {
  background-color: rgb(249.85, 232.8326086957, 208.65);
  color: rgb(206.1, 130.4304347826, 22.9);
}
.status--closed {
  background-color: rgb(140.25, 140.25, 140.25);
  color: rgb(25.5, 25.5, 25.5);
}
.status--canceled, .status--ready-for-return, .status--returned, .status--waiting-for-return, .status--return-canceled {
  background-color: rgb(208.25, 208.25, 208.25);
  color: rgb(93.5, 93.5, 93.5);
}
.status--draft {
  background-color: rgb(164.0690789474, 164.0690789474, 166.4309210526);
  color: rgb(49.8355263158, 49.8355263158, 51.1644736842);
}
.status--small {
  padding: 0 1.0666666667rem;
}
.status--ready, .status--paid, .status--delivered {
  background-color: white;
  color: #fecc00;
}
.status--cancelled, .status--ready-for-return, .status--returned, .status--waiting-for-return, .status--return-canceled {
  background-color: white;
  color: #b2b2b2;
}
.status--shipped {
  background-color: rgb(208.4491017964, 201.9724550898, 240.4275449102);
  color: #342483;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.suggest-search__container {
  border-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  max-height: 50vh;
  position: absolute;
  width: 100%;
  top: 130%;
  margin: -0.2rem 0 0 0;
  padding: 0;
  background: #fff;
  overflow-x: hidden;
  z-index: 703;
  display: none;
}
@media only screen and (min-width: 550px) {
  .suggest-search__container {
    display: block;
  }
}
@media only screen and (min-width: 768px) {
  .suggest-search__container {
    max-height: unset;
    width: 100%;
  }
}
@media only screen and (min-width: 1025px) {
  .suggest-search__container {
    left: -14rem;
    width: 1024px;
  }
}
@media only screen and (min-width: 1200px) {
  .suggest-search__container {
    left: -20.5rem;
    width: 1200px;
  }
}
.suggest-search__box {
  margin: 1rem 1rem 0;
  width: 100%;
}
@media only screen and (min-width: 768px) {
  .suggest-search__box {
    margin: 0;
  }
}
.suggest-search__input {
  position: relative;
}
.suggest-search__input--active {
  border-radius: 10px 10px 0 0;
}
.suggest-search__input--transparent {
  background-color: rgba(255, 255, 255, 0);
}
.suggest-search__product {
  padding-bottom: 0.6666666667rem;
}
.suggest-search__product-action {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
  background-color: #ececec;
  color: #4b4b4d;
  padding-top: 1.5333333333rem;
  padding-right: 1rem;
}
.suggest-search__product-action svg {
  fill: #4b4b4d;
}
@media only screen and (min-width: 768px) {
  .suggest-search__product-action {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
  }
}
.suggest-search__hint {
  padding: 1.2666666667rem 3.0666666667rem 1.3333333333rem 2.8666666667rem;
  border: none;
  font-size: 1.2rem;
  font-weight: 700;
  position: absolute;
  color: #d0d0d0;
  top: 0;
  z-index: 701;
}
@media only screen and (min-width: 768px) {
  .suggest-search__hint {
    padding: 1rem 1rem 1rem 3.7333333333rem;
    font-size: 1rem;
    font-weight: 400;
  }
}
.suggest-search__hint--active {
  background-color: #1a171b;
  border-radius: 10px 10px 0 0;
}
.suggest-search .suggestion-results__container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
@media only screen and (min-width: 768px) {
  .suggest-search .suggestion-results__container {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    -webkit-box-pack: space-even;
        -ms-flex-pack: space-even;
            justify-content: space-even;
    padding: 1rem;
  }
}
@media only screen and (min-width: 768px) {
  .suggest-search .suggestion-results__resize-container {
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
    padding: 1.5rem;
    /* stylelint-disable-next-line max-nesting-depth */
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .suggest-search .suggestion-results__resize-container .suggestion-results__column {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    -ms-flex-preferred-size: 50%;
        flex-basis: 50%;
  }
  .suggest-search .suggestion-results__resize-container .suggestion-results__no-results {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    -ms-flex-preferred-size: 50%;
        flex-basis: 50%;
  }
}
.suggest-search .suggestion-results__resize-no-results {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
}
.suggest-search .suggestion-results__column--left {
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
}
.suggest-search .suggestion-results__column--right {
  -webkit-box-flex: 2;
      -ms-flex-positive: 2;
          flex-grow: 2;
}
@media only screen and (min-width: 768px) {
  .suggest-search .suggestion-results__column--left {
    max-width: 40%;
  }
  .suggest-search .suggestion-results__column--right {
    margin: 1rem 1rem 0;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.checkbox {
  display: inline-block;
}
.checkbox__container {
  cursor: pointer;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-flow: row nowrap;
          flex-flow: row nowrap;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  position: relative;
}
.checkbox__box {
  -webkit-transition: background-color 250ms ease-in-out, border-color 250ms ease-in-out;
  transition: background-color 250ms ease-in-out, border-color 250ms ease-in-out;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  width: 1.4666666667rem;
  height: 1.4666666667rem;
  border: 0.0666666667rem solid #d0d0d0;
  background-color: #fff;
  margin-right: 0.6666666667rem;
  text-align: center;
  border-radius: 0.1333333333rem;
  -webkit-box-flex: 0;
      -ms-flex: none;
          flex: none;
}
.checkbox__box svg {
  width: 1rem;
  height: 1rem;
}
@media only screen and (min-width: 768px) {
  .checkbox__box {
    margin-right: 0.9333333333rem;
    width: 1.4666666667rem;
    height: 1.4666666667rem;
  }
}
.checkbox__box--filter {
  width: 1.6rem;
  height: 1.6rem;
  line-height: 1.6rem;
}
@media only screen and (min-width: 768px) {
  .checkbox__box--filter {
    width: 1.125rem;
    height: 1.125rem;
    line-height: 1.125rem;
  }
}
.checkbox__box--shopping-list {
  position: static;
  z-index: 1;
}
@media only screen and (min-width: 768px) {
  .checkbox__box--shopping-list {
    position: static;
    margin-right: 0.6666666667rem;
  }
}
.checkbox__box--alternative {
  border: solid 0.1333333333rem #d0d0d0;
}
.checkbox__input {
  pointer-events: none;
  opacity: 0;
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  position: absolute;
  top: 0;
  width: 1.4666666667rem;
  height: 1.4666666667rem;
}
.checkbox__input:checked ~ .checkbox__box {
  background-color: #fff;
  color: #4b4b4d;
  /* stylelint-disable-next-line max-nesting-depth */
}
.checkbox__input:checked ~ .checkbox__box svg {
  fill: #4b4b4d;
}
.checkbox__input:checked ~ .checkbox__box .checkbox__check {
  pointer-events: all;
  visibility: visible;
  opacity: 1;
}
.checkbox__input:checked ~ .checkbox__box--alternative {
  background-color: #fff;
  border-color: #d0d0d0;
}
.checkbox__input:checked ~ .checkbox__label {
  /* stylelint-disable-next-line max-nesting-depth */
}
.checkbox__input:checked ~ .checkbox__label--alternative {
  font-weight: 400;
}
.checkbox__input:focus ~ .checkbox__box {
  -webkit-box-shadow: 0 0 0 3px #fecc00;
          box-shadow: 0 0 0 3px #fecc00;
}
.checkbox__input[disabled] ~ .checkbox__box, .checkbox__input[disabled] ~ .checkbox__box:hover, .checkbox__input--disabled ~ .checkbox__box, .checkbox__input--disabled ~ .checkbox__box:hover {
  background-color: #fff;
  border-color: #ececec;
  cursor: not-allowed;
}
.checkbox__input[disabled]:checked ~ .checkbox__box, .checkbox__input--disabled:checked ~ .checkbox__box {
  background-color: #ececec;
}
.checkbox__input[disabled] ~ .checkbox__label, .checkbox__input--disabled ~ .checkbox__label {
  color: #d0d0d0;
  cursor: not-allowed;
}
.checkbox__check {
  pointer-events: none;
  visibility: hidden;
  opacity: 0;
  -webkit-transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  color: #4b4b4d;
  vertical-align: baseline;
  line-height: 0.9333333333rem;
}
.checkbox__check--alternative {
  color: #d0d0d0;
  margin-bottom: 0.1333333333rem;
}
.checkbox__label {
  display: inline-block;
  vertical-align: middle;
  text-transform: none;
  font-size: 0.9333333333rem;
  font-weight: 400;
  margin: 0;
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
  -ms-flex-preferred-size: auto;
      flex-basis: auto;
}
.checkbox__label--filter {
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  font-size: 0.9333333333rem;
  font-weight: 400;
  text-transform: none;
  margin-bottom: 0;
}
.checkbox__label--alternative {
  margin-bottom: 0;
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.3333333333rem;
  color: #d0d0d0;
  text-transform: none;
}
.checkbox__counter {
  padding-left: 0.5333333333rem;
}
.checkbox--expand {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.checkbox--filter {
  width: 100%;
  font-size: 1rem;
  line-height: 1.2rem;
}
@media only screen and (min-width: 768px) {
  .checkbox--filter {
    font-size: 0.9333333333rem;
  }
}
.checkbox--alternative {
  margin-bottom: 1rem;
}
.checkbox--alternative:hover .checkbox__box--alternative {
  border-color: #d0d0d0;
}
@media only screen and (min-width: 768px) {
  .checkbox--pdp {
    margin-left: 8.8rem;
  }
}
.checkbox--pdp:hover .checkbox__box--alternative {
  border-color: #d0d0d0;
}
.checkbox--error .checkbox__box {
  border-color: #e32213;
}
.checkbox:hover .checkbox__box {
  border-color: #fecc00;
}
.checkbox:hover .checkbox__input[disabled] ~ .checkbox__box,
.checkbox:hover .checkbox__input--disabled ~ .checkbox__box {
  border-color: #ececec;
}
@media only screen and (max-width: 767px) {
  .checkbox.tooltip-position-left-lg .tooltip-button__tooltip {
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .checkbox.tooltip-position-left-lg .tooltip-button__tooltip::after {
    right: 4%;
  }
  .checkbox.tooltip-position-left-lg .tooltip-button__tooltip-container {
    left: auto;
    -webkit-transform: none;
            transform: none;
  }
}

.toggler-checkbox {
  display: inline-block;
}
.toggler-checkbox__container {
  cursor: pointer;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-flow: row nowrap;
          flex-flow: row nowrap;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  position: relative;
}
.toggler-checkbox__box {
  -webkit-transition: background-color 250ms ease-in-out, border-color 250ms ease-in-out;
  transition: background-color 250ms ease-in-out, border-color 250ms ease-in-out;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  width: 1.4666666667rem;
  height: 1.4666666667rem;
  border: 0.0666666667rem solid #d0d0d0;
  background-color: #fff;
  margin-right: 0.6666666667rem;
  text-align: center;
  border-radius: 0.1333333333rem;
  -webkit-box-flex: 0;
      -ms-flex: none;
          flex: none;
}
.toggler-checkbox__box svg {
  width: 1rem;
  height: 1rem;
}
@media only screen and (min-width: 768px) {
  .toggler-checkbox__box {
    margin-right: 0.9333333333rem;
    width: 1.4666666667rem;
    height: 1.4666666667rem;
  }
}
.toggler-checkbox__box--filter {
  width: 1.6rem;
  height: 1.6rem;
  line-height: 1.6rem;
}
@media only screen and (min-width: 768px) {
  .toggler-checkbox__box--filter {
    width: 1.125rem;
    height: 1.125rem;
    line-height: 1.125rem;
  }
}
.toggler-checkbox__box--shopping-list {
  position: static;
  z-index: 1;
}
@media only screen and (min-width: 768px) {
  .toggler-checkbox__box--shopping-list {
    position: static;
    margin-right: 0.6666666667rem;
  }
}
.toggler-checkbox__box--alternative {
  border: solid 0.1333333333rem #d0d0d0;
}
.toggler-checkbox__input {
  pointer-events: none;
  opacity: 0;
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  position: absolute;
  top: 0;
  width: 1.4666666667rem;
  height: 1.4666666667rem;
}
.toggler-checkbox__input:checked ~ .toggler-checkbox__box {
  background-color: #fff;
  color: #4b4b4d;
  /* stylelint-disable-next-line max-nesting-depth */
}
.toggler-checkbox__input:checked ~ .toggler-checkbox__box svg {
  fill: #4b4b4d;
}
.toggler-checkbox__input:checked ~ .toggler-checkbox__box .toggler-checkbox__check {
  pointer-events: all;
  visibility: visible;
  opacity: 1;
}
.toggler-checkbox__input:checked ~ .toggler-checkbox__box--alternative {
  background-color: #fff;
  border-color: #d0d0d0;
}
.toggler-checkbox__input:checked ~ .toggler-checkbox__label {
  /* stylelint-disable-next-line max-nesting-depth */
}
.toggler-checkbox__input:checked ~ .toggler-checkbox__label--alternative {
  font-weight: 400;
}
.toggler-checkbox__input:focus ~ .toggler-checkbox__box {
  -webkit-box-shadow: 0 0 0 3px #fecc00;
          box-shadow: 0 0 0 3px #fecc00;
}
.toggler-checkbox__input[disabled] ~ .toggler-checkbox__box, .toggler-checkbox__input[disabled] ~ .toggler-checkbox__box:hover, .toggler-checkbox__input--disabled ~ .toggler-checkbox__box, .toggler-checkbox__input--disabled ~ .toggler-checkbox__box:hover {
  background-color: #fff;
  border-color: #ececec;
  cursor: not-allowed;
}
.toggler-checkbox__input[disabled]:checked ~ .toggler-checkbox__box, .toggler-checkbox__input--disabled:checked ~ .toggler-checkbox__box {
  background-color: #ececec;
}
.toggler-checkbox__input[disabled] ~ .toggler-checkbox__label, .toggler-checkbox__input--disabled ~ .toggler-checkbox__label {
  color: #d0d0d0;
  cursor: not-allowed;
}
.toggler-checkbox__check {
  pointer-events: none;
  visibility: hidden;
  opacity: 0;
  -webkit-transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  color: #4b4b4d;
  vertical-align: baseline;
  line-height: 0.9333333333rem;
}
.toggler-checkbox__check--alternative {
  color: #d0d0d0;
  margin-bottom: 0.1333333333rem;
}
.toggler-checkbox__label {
  display: inline-block;
  vertical-align: middle;
  text-transform: none;
  font-size: 0.9333333333rem;
  font-weight: 400;
  margin: 0;
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
  -ms-flex-preferred-size: auto;
      flex-basis: auto;
}
.toggler-checkbox__label--filter {
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  font-size: 0.9333333333rem;
  font-weight: 400;
  text-transform: none;
  margin-bottom: 0;
}
.toggler-checkbox__label--alternative {
  margin-bottom: 0;
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.3333333333rem;
  color: #d0d0d0;
  text-transform: none;
}
.toggler-checkbox__counter {
  padding-left: 0.5333333333rem;
}
.toggler-checkbox--expand {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.toggler-checkbox--filter {
  width: 100%;
  font-size: 1rem;
  line-height: 1.2rem;
}
@media only screen and (min-width: 768px) {
  .toggler-checkbox--filter {
    font-size: 0.9333333333rem;
  }
}
.toggler-checkbox--alternative {
  margin-bottom: 1rem;
}
.toggler-checkbox--alternative:hover .toggler-checkbox__box--alternative {
  border-color: #d0d0d0;
}
@media only screen and (min-width: 768px) {
  .toggler-checkbox--pdp {
    margin-left: 8.8rem;
  }
}
.toggler-checkbox--pdp:hover .toggler-checkbox__box--alternative {
  border-color: #d0d0d0;
}
.toggler-checkbox--error .toggler-checkbox__box {
  border-color: #e32213;
}
.toggler-checkbox:hover .toggler-checkbox__box {
  border-color: #fecc00;
}
.toggler-checkbox:hover .toggler-checkbox__input[disabled] ~ .toggler-checkbox__box,
.toggler-checkbox:hover .toggler-checkbox__input--disabled ~ .toggler-checkbox__box {
  border-color: #ececec;
}
@media only screen and (max-width: 767px) {
  .toggler-checkbox.tooltip-position-left-lg .tooltip-button__tooltip {
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .toggler-checkbox.tooltip-position-left-lg .tooltip-button__tooltip::after {
    right: 4%;
  }
  .toggler-checkbox.tooltip-position-left-lg .tooltip-button__tooltip-container {
    left: auto;
    -webkit-transform: none;
            transform: none;
  }
}
.toggler-checkbox__input:checked ~ .toggler-checkbox__label {
  font-weight: 400;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.checkbox {
  display: inline-block;
}
.checkbox__container {
  cursor: pointer;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-flow: row nowrap;
          flex-flow: row nowrap;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  position: relative;
}
.checkbox__box {
  -webkit-transition: background-color 250ms ease-in-out, border-color 250ms ease-in-out;
  transition: background-color 250ms ease-in-out, border-color 250ms ease-in-out;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  width: 1.4666666667rem;
  height: 1.4666666667rem;
  border: 0.0666666667rem solid #d0d0d0;
  background-color: #fff;
  margin-right: 0.6666666667rem;
  text-align: center;
  border-radius: 0.1333333333rem;
  -webkit-box-flex: 0;
      -ms-flex: none;
          flex: none;
}
.checkbox__box svg {
  width: 1rem;
  height: 1rem;
}
@media only screen and (min-width: 768px) {
  .checkbox__box {
    margin-right: 0.9333333333rem;
    width: 1.4666666667rem;
    height: 1.4666666667rem;
  }
}
.checkbox__box--filter {
  width: 1.6rem;
  height: 1.6rem;
  line-height: 1.6rem;
}
@media only screen and (min-width: 768px) {
  .checkbox__box--filter {
    width: 1.125rem;
    height: 1.125rem;
    line-height: 1.125rem;
  }
}
.checkbox__box--shopping-list {
  position: static;
  z-index: 1;
}
@media only screen and (min-width: 768px) {
  .checkbox__box--shopping-list {
    position: static;
    margin-right: 0.6666666667rem;
  }
}
.checkbox__box--alternative {
  border: solid 0.1333333333rem #d0d0d0;
}
.checkbox__input {
  pointer-events: none;
  opacity: 0;
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  position: absolute;
  top: 0;
  width: 1.4666666667rem;
  height: 1.4666666667rem;
}
.checkbox__input:checked ~ .checkbox__box {
  background-color: #fff;
  color: #4b4b4d;
  /* stylelint-disable-next-line max-nesting-depth */
}
.checkbox__input:checked ~ .checkbox__box svg {
  fill: #4b4b4d;
}
.checkbox__input:checked ~ .checkbox__box .checkbox__check {
  pointer-events: all;
  visibility: visible;
  opacity: 1;
}
.checkbox__input:checked ~ .checkbox__box--alternative {
  background-color: #fff;
  border-color: #d0d0d0;
}
.checkbox__input:checked ~ .checkbox__label {
  /* stylelint-disable-next-line max-nesting-depth */
}
.checkbox__input:checked ~ .checkbox__label--alternative {
  font-weight: 400;
}
.checkbox__input:focus ~ .checkbox__box {
  -webkit-box-shadow: 0 0 0 3px #fecc00;
          box-shadow: 0 0 0 3px #fecc00;
}
.checkbox__input[disabled] ~ .checkbox__box, .checkbox__input[disabled] ~ .checkbox__box:hover, .checkbox__input--disabled ~ .checkbox__box, .checkbox__input--disabled ~ .checkbox__box:hover {
  background-color: #fff;
  border-color: #ececec;
  cursor: not-allowed;
}
.checkbox__input[disabled]:checked ~ .checkbox__box, .checkbox__input--disabled:checked ~ .checkbox__box {
  background-color: #ececec;
}
.checkbox__input[disabled] ~ .checkbox__label, .checkbox__input--disabled ~ .checkbox__label {
  color: #d0d0d0;
  cursor: not-allowed;
}
.checkbox__check {
  pointer-events: none;
  visibility: hidden;
  opacity: 0;
  -webkit-transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  color: #4b4b4d;
  vertical-align: baseline;
  line-height: 0.9333333333rem;
}
.checkbox__check--alternative {
  color: #d0d0d0;
  margin-bottom: 0.1333333333rem;
}
.checkbox__label {
  display: inline-block;
  vertical-align: middle;
  text-transform: none;
  font-size: 0.9333333333rem;
  font-weight: 400;
  margin: 0;
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
  -ms-flex-preferred-size: auto;
      flex-basis: auto;
}
.checkbox__label--filter {
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  font-size: 0.9333333333rem;
  font-weight: 400;
  text-transform: none;
  margin-bottom: 0;
}
.checkbox__label--alternative {
  margin-bottom: 0;
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.3333333333rem;
  color: #d0d0d0;
  text-transform: none;
}
.checkbox__counter {
  padding-left: 0.5333333333rem;
}
.checkbox--expand {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.checkbox--filter {
  width: 100%;
  font-size: 1rem;
  line-height: 1.2rem;
}
@media only screen and (min-width: 768px) {
  .checkbox--filter {
    font-size: 0.9333333333rem;
  }
}
.checkbox--alternative {
  margin-bottom: 1rem;
}
.checkbox--alternative:hover .checkbox__box--alternative {
  border-color: #d0d0d0;
}
@media only screen and (min-width: 768px) {
  .checkbox--pdp {
    margin-left: 8.8rem;
  }
}
.checkbox--pdp:hover .checkbox__box--alternative {
  border-color: #d0d0d0;
}
.checkbox--error .checkbox__box {
  border-color: #e32213;
}
.checkbox:hover .checkbox__box {
  border-color: #fecc00;
}
.checkbox:hover .checkbox__input[disabled] ~ .checkbox__box,
.checkbox:hover .checkbox__input--disabled ~ .checkbox__box {
  border-color: #ececec;
}
@media only screen and (max-width: 767px) {
  .checkbox.tooltip-position-left-lg .tooltip-button__tooltip {
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .checkbox.tooltip-position-left-lg .tooltip-button__tooltip::after {
    right: 4%;
  }
  .checkbox.tooltip-position-left-lg .tooltip-button__tooltip-container {
    left: auto;
    -webkit-transform: none;
            transform: none;
  }
}

.radio {
  display: inline-block;
}
.radio__container {
  cursor: pointer;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-flow: row nowrap;
          flex-flow: row nowrap;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  position: relative;
}
.radio__box {
  -webkit-transition: background-color 250ms ease-in-out, border-color 250ms ease-in-out;
  transition: background-color 250ms ease-in-out, border-color 250ms ease-in-out;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  width: 1.4666666667rem;
  height: 1.4666666667rem;
  border: 0.0666666667rem solid #d0d0d0;
  background-color: #fff;
  margin-right: 0.6666666667rem;
  text-align: center;
  border-radius: 0.1333333333rem;
  -webkit-box-flex: 0;
      -ms-flex: none;
          flex: none;
}
.radio__box svg {
  width: 1rem;
  height: 1rem;
}
@media only screen and (min-width: 768px) {
  .radio__box {
    margin-right: 0.9333333333rem;
    width: 1.4666666667rem;
    height: 1.4666666667rem;
  }
}
.radio__box--filter {
  width: 1.6rem;
  height: 1.6rem;
  line-height: 1.6rem;
}
@media only screen and (min-width: 768px) {
  .radio__box--filter {
    width: 1.125rem;
    height: 1.125rem;
    line-height: 1.125rem;
  }
}
.radio__box--shopping-list {
  position: static;
  z-index: 1;
}
@media only screen and (min-width: 768px) {
  .radio__box--shopping-list {
    position: static;
    margin-right: 0.6666666667rem;
  }
}
.radio__box--alternative {
  border: solid 0.1333333333rem #d0d0d0;
}
.radio__input {
  pointer-events: none;
  opacity: 0;
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  position: absolute;
  top: 0;
  width: 1.4666666667rem;
  height: 1.4666666667rem;
}
.radio__input:checked ~ .radio__box {
  background-color: #fff;
  color: #4b4b4d;
  /* stylelint-disable-next-line max-nesting-depth */
}
.radio__input:checked ~ .radio__box svg {
  fill: #4b4b4d;
}
.radio__input:checked ~ .radio__box .radio__check {
  pointer-events: all;
  visibility: visible;
  opacity: 1;
}
.radio__input:checked ~ .radio__box--alternative {
  background-color: #fff;
  border-color: #d0d0d0;
}
.radio__input:checked ~ .radio__label {
  /* stylelint-disable-next-line max-nesting-depth */
}
.radio__input:checked ~ .radio__label--alternative {
  font-weight: 400;
}
.radio__input:focus ~ .radio__box {
  -webkit-box-shadow: 0 0 0 3px #fecc00;
          box-shadow: 0 0 0 3px #fecc00;
}
.radio__input[disabled] ~ .radio__box, .radio__input[disabled] ~ .radio__box:hover, .radio__input--disabled ~ .radio__box, .radio__input--disabled ~ .radio__box:hover {
  background-color: #fff;
  border-color: #ececec;
  cursor: not-allowed;
}
.radio__input[disabled]:checked ~ .radio__box, .radio__input--disabled:checked ~ .radio__box {
  background-color: #ececec;
}
.radio__input[disabled] ~ .radio__label, .radio__input--disabled ~ .radio__label {
  color: #d0d0d0;
  cursor: not-allowed;
}
.radio__check {
  pointer-events: none;
  visibility: hidden;
  opacity: 0;
  -webkit-transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  color: #4b4b4d;
  vertical-align: baseline;
  line-height: 0.9333333333rem;
}
.radio__check--alternative {
  color: #d0d0d0;
  margin-bottom: 0.1333333333rem;
}
.radio__label {
  display: inline-block;
  vertical-align: middle;
  text-transform: none;
  font-size: 0.9333333333rem;
  font-weight: 400;
  margin: 0;
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
  -ms-flex-preferred-size: auto;
      flex-basis: auto;
}
.radio__label--filter {
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  font-size: 0.9333333333rem;
  font-weight: 400;
  text-transform: none;
  margin-bottom: 0;
}
.radio__label--alternative {
  margin-bottom: 0;
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.3333333333rem;
  color: #d0d0d0;
  text-transform: none;
}
.radio__counter {
  padding-left: 0.5333333333rem;
}
.radio--expand {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.radio--filter {
  width: 100%;
  font-size: 1rem;
  line-height: 1.2rem;
}
@media only screen and (min-width: 768px) {
  .radio--filter {
    font-size: 0.9333333333rem;
  }
}
.radio--alternative {
  margin-bottom: 1rem;
}
.radio--alternative:hover .radio__box--alternative {
  border-color: #d0d0d0;
}
@media only screen and (min-width: 768px) {
  .radio--pdp {
    margin-left: 8.8rem;
  }
}
.radio--pdp:hover .radio__box--alternative {
  border-color: #d0d0d0;
}
.radio--error .radio__box {
  border-color: #e32213;
}
.radio:hover .radio__box {
  border-color: #fecc00;
}
.radio:hover .radio__input[disabled] ~ .radio__box,
.radio:hover .radio__input--disabled ~ .radio__box {
  border-color: #ececec;
}
@media only screen and (max-width: 767px) {
  .radio.tooltip-position-left-lg .tooltip-button__tooltip {
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .radio.tooltip-position-left-lg .tooltip-button__tooltip::after {
    right: 4%;
  }
  .radio.tooltip-position-left-lg .tooltip-button__tooltip-container {
    left: auto;
    -webkit-transform: none;
            transform: none;
  }
}
.radio--mobile-small .radio__box {
  width: 1rem;
  height: 1rem;
  line-height: 1.5;
}
.radio__box {
  -webkit-transition: border-color 250ms ease-in-out;
  transition: border-color 250ms ease-in-out;
  border-radius: 100%;
  border-width: 0.1333333333rem;
}
.radio__check {
  display: none;
}
.radio__label {
  color: #4b4b4d;
  font-weight: 400;
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .radio__label {
    -ms-flex-negative: 0;
        flex-shrink: 0;
    -ms-flex-preferred-size: auto;
        flex-basis: auto;
  }
}
.radio__input:checked ~ .radio__box {
  background-color: #4b4b4d;
  -webkit-box-shadow: inset 0 0 0 0.32rem #fff;
          box-shadow: inset 0 0 0 0.32rem #fff;
  /* stylelint-disable-next-line declaration-no-important */
  border-width: 1px !important;
  border-color: #d0d0d0;
}
.radio__input:checked ~ .radio__label {
  font-weight: 400;
}

.toggler-radio {
  display: inline-block;
}
.toggler-radio__container {
  cursor: pointer;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-flow: row nowrap;
          flex-flow: row nowrap;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  position: relative;
}
.toggler-radio__box {
  -webkit-transition: background-color 250ms ease-in-out, border-color 250ms ease-in-out;
  transition: background-color 250ms ease-in-out, border-color 250ms ease-in-out;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  width: 1.4666666667rem;
  height: 1.4666666667rem;
  border: 0.0666666667rem solid #d0d0d0;
  background-color: #fff;
  margin-right: 0.6666666667rem;
  text-align: center;
  border-radius: 0.1333333333rem;
  -webkit-box-flex: 0;
      -ms-flex: none;
          flex: none;
}
.toggler-radio__box svg {
  width: 1rem;
  height: 1rem;
}
@media only screen and (min-width: 768px) {
  .toggler-radio__box {
    margin-right: 0.9333333333rem;
    width: 1.4666666667rem;
    height: 1.4666666667rem;
  }
}
.toggler-radio__box--filter {
  width: 1.6rem;
  height: 1.6rem;
  line-height: 1.6rem;
}
@media only screen and (min-width: 768px) {
  .toggler-radio__box--filter {
    width: 1.125rem;
    height: 1.125rem;
    line-height: 1.125rem;
  }
}
.toggler-radio__box--shopping-list {
  position: static;
  z-index: 1;
}
@media only screen and (min-width: 768px) {
  .toggler-radio__box--shopping-list {
    position: static;
    margin-right: 0.6666666667rem;
  }
}
.toggler-radio__box--alternative {
  border: solid 0.1333333333rem #d0d0d0;
}
.toggler-radio__input {
  pointer-events: none;
  opacity: 0;
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  position: absolute;
  top: 0;
  width: 1.4666666667rem;
  height: 1.4666666667rem;
}
.toggler-radio__input:checked ~ .toggler-radio__box {
  background-color: #fff;
  color: #4b4b4d;
  /* stylelint-disable-next-line max-nesting-depth */
}
.toggler-radio__input:checked ~ .toggler-radio__box svg {
  fill: #4b4b4d;
}
.toggler-radio__input:checked ~ .toggler-radio__box .toggler-radio__check {
  pointer-events: all;
  visibility: visible;
  opacity: 1;
}
.toggler-radio__input:checked ~ .toggler-radio__box--alternative {
  background-color: #fff;
  border-color: #d0d0d0;
}
.toggler-radio__input:checked ~ .toggler-radio__label {
  /* stylelint-disable-next-line max-nesting-depth */
}
.toggler-radio__input:checked ~ .toggler-radio__label--alternative {
  font-weight: 400;
}
.toggler-radio__input:focus ~ .toggler-radio__box {
  -webkit-box-shadow: 0 0 0 3px #fecc00;
          box-shadow: 0 0 0 3px #fecc00;
}
.toggler-radio__input[disabled] ~ .toggler-radio__box, .toggler-radio__input[disabled] ~ .toggler-radio__box:hover, .toggler-radio__input--disabled ~ .toggler-radio__box, .toggler-radio__input--disabled ~ .toggler-radio__box:hover {
  background-color: #fff;
  border-color: #ececec;
  cursor: not-allowed;
}
.toggler-radio__input[disabled]:checked ~ .toggler-radio__box, .toggler-radio__input--disabled:checked ~ .toggler-radio__box {
  background-color: #ececec;
}
.toggler-radio__input[disabled] ~ .toggler-radio__label, .toggler-radio__input--disabled ~ .toggler-radio__label {
  color: #d0d0d0;
  cursor: not-allowed;
}
.toggler-radio__check {
  pointer-events: none;
  visibility: hidden;
  opacity: 0;
  -webkit-transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  color: #4b4b4d;
  vertical-align: baseline;
  line-height: 0.9333333333rem;
}
.toggler-radio__check--alternative {
  color: #d0d0d0;
  margin-bottom: 0.1333333333rem;
}
.toggler-radio__label {
  display: inline-block;
  vertical-align: middle;
  text-transform: none;
  font-size: 0.9333333333rem;
  font-weight: 400;
  margin: 0;
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
  -ms-flex-preferred-size: auto;
      flex-basis: auto;
}
.toggler-radio__label--filter {
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  font-size: 0.9333333333rem;
  font-weight: 400;
  text-transform: none;
  margin-bottom: 0;
}
.toggler-radio__label--alternative {
  margin-bottom: 0;
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.3333333333rem;
  color: #d0d0d0;
  text-transform: none;
}
.toggler-radio__counter {
  padding-left: 0.5333333333rem;
}
.toggler-radio--expand {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.toggler-radio--filter {
  width: 100%;
  font-size: 1rem;
  line-height: 1.2rem;
}
@media only screen and (min-width: 768px) {
  .toggler-radio--filter {
    font-size: 0.9333333333rem;
  }
}
.toggler-radio--alternative {
  margin-bottom: 1rem;
}
.toggler-radio--alternative:hover .toggler-radio__box--alternative {
  border-color: #d0d0d0;
}
@media only screen and (min-width: 768px) {
  .toggler-radio--pdp {
    margin-left: 8.8rem;
  }
}
.toggler-radio--pdp:hover .toggler-radio__box--alternative {
  border-color: #d0d0d0;
}
.toggler-radio--error .toggler-radio__box {
  border-color: #e32213;
}
.toggler-radio:hover .toggler-radio__box {
  border-color: #fecc00;
}
.toggler-radio:hover .toggler-radio__input[disabled] ~ .toggler-radio__box,
.toggler-radio:hover .toggler-radio__input--disabled ~ .toggler-radio__box {
  border-color: #ececec;
}
@media only screen and (max-width: 767px) {
  .toggler-radio.tooltip-position-left-lg .tooltip-button__tooltip {
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .toggler-radio.tooltip-position-left-lg .tooltip-button__tooltip::after {
    right: 4%;
  }
  .toggler-radio.tooltip-position-left-lg .tooltip-button__tooltip-container {
    left: auto;
    -webkit-transform: none;
            transform: none;
  }
}
.toggler-radio--mobile-small .toggler-radio__box {
  width: 1rem;
  height: 1rem;
  line-height: 1.5;
}
.toggler-radio__box {
  -webkit-transition: border-color 250ms ease-in-out;
  transition: border-color 250ms ease-in-out;
  border-radius: 100%;
  border-width: 0.1333333333rem;
}
.toggler-radio__check {
  display: none;
}
.toggler-radio__label {
  color: #4b4b4d;
  font-weight: 400;
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .toggler-radio__label {
    -ms-flex-negative: 0;
        flex-shrink: 0;
    -ms-flex-preferred-size: auto;
        flex-basis: auto;
  }
}
.toggler-radio__input:checked ~ .toggler-radio__box {
  background-color: #4b4b4d;
  -webkit-box-shadow: inset 0 0 0 0.32rem #fff;
          box-shadow: inset 0 0 0 0.32rem #fff;
  /* stylelint-disable-next-line declaration-no-important */
  border-width: 1px !important;
  border-color: #d0d0d0;
}
.toggler-radio__input:checked ~ .toggler-radio__label {
  font-weight: 400;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.tooltip-message {
  pointer-events: none;
  visibility: hidden;
  opacity: 0;
  -webkit-transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  display: block;
  position: absolute;
  min-width: 20rem;
  margin-top: -0.5rem;
  -webkit-transform: translateX(-50%);
          transform: translateX(-50%);
}
.tooltip-message__text {
  font-size: 1rem;
  -webkit-box-shadow: 0 2px 5px 1px rgba(0, 0, 0, 0.2);
          box-shadow: 0 2px 5px 1px rgba(0, 0, 0, 0.2);
  float: left;
  display: block;
  position: absolute;
  bottom: 0;
  padding: 0.25rem;
  background-color: #fff;
  border: 1px solid #dadada;
  text-align: center;
  z-index: 2;
}
.tooltip-message__arrow {
  position: absolute;
  left: calc(50% - 0.5rem);
  bottom: -0.5rem;
  border: 0.5rem solid #dadada;
  border-top-color: transparent;
  border-left-color: transparent;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
  z-index: 1;
}
.tooltip-message--success .tooltip-message__text {
  background-color: rgb(69.7862068966, 253.7137931034, 141.8137931034);
  border-color: #019039;
  color: #019039;
}
.tooltip-message--success .tooltip-message__arrow {
  border-right-color: #019039;
  border-bottom-color: #019039;
}
.tooltip-message--success-light .tooltip-message__text {
  background-color: white;
  border-color: #abd18b;
  color: #abd18b;
}
.tooltip-message--success-light .tooltip-message__arrow {
  border-right-color: #abd18b;
  border-bottom-color: #abd18b;
}
.tooltip-message--warning .tooltip-message__text {
  background-color: rgb(249.85, 232.8326086957, 208.65);
  border-color: #e89c30;
  color: #e89c30;
}
.tooltip-message--warning .tooltip-message__arrow {
  border-right-color: #e89c30;
  border-bottom-color: #e89c30;
}
.tooltip-message--alert .tooltip-message__text {
  background-color: rgb(248.3963414634, 181.3170731707, 176.1036585366);
  border-color: #e32213;
  color: #e32213;
}
.tooltip-message--alert .tooltip-message__arrow {
  border-right-color: #e32213;
  border-bottom-color: #e32213;
}
.tooltip-message--info .tooltip-message__text {
  background-color: rgb(255, 239.7440944882, 177.5);
  border-color: #fecc00;
  color: #fecc00;
}
.tooltip-message--info .tooltip-message__arrow {
  border-right-color: #fecc00;
  border-bottom-color: #fecc00;
}
.tooltip-message--neutral .tooltip-message__text {
  background-color: rgb(235.25, 235.25, 235.25);
  border-color: #929292;
  color: #929292;
}
.tooltip-message--neutral .tooltip-message__arrow {
  border-right-color: #929292;
  border-bottom-color: #929292;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
/* stylelint-disable max-nesting-depth */
.header {
  position: relative;
  -webkit-box-flex: 0;
      -ms-flex: none;
          flex: none;
  z-index: 400;
  background-color: #fff;
  color: #4b4b4d;
  -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0;
          box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0;
}
.header svg {
  fill: #4b4b4d;
}
.body-overlay--no-search .header {
  z-index: 700;
}
.header__row {
  padding: 0.5333333333rem;
}
.header__navigation-top {
  position: relative;
  z-index: 403;
}
@media only screen and (min-width: 768px) {
  .header__search-form {
    display: block;
    position: relative;
  }
}
.body-overlay--no-search .header__search-form {
  z-index: 700;
}
.header__navigation-main {
  position: relative;
  z-index: 401;
}
.header__top {
  opacity: 1;
  max-height: 2.5333333333rem;
  -webkit-transition: all 300ms ease-in-out;
  transition: all 300ms ease-in-out;
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
}
@media only screen and (min-width: 768px) {
  .header__top {
    display: block;
    padding-left: 0;
  }
}
.header__top--product-configurator .navigation-top, .header__top--dealer-search-registration .navigation-top, .header__top--checkout .navigation-top {
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
}
.header__top--product-configurator .navigation-top .grid.container, .header__top--dealer-search-registration .navigation-top .grid.container, .header__top--checkout .navigation-top .grid.container {
  max-width: 990px;
}
@media only screen and (max-width: 1024px) {
  .header__logo {
    width: 29%;
    left: 1rem;
    position: absolute;
    -webkit-transition: all 300ms ease-in-out;
    transition: all 300ms ease-in-out;
  }
}
@media only screen and (min-width: 1025px) {
  .header__logo {
    -ms-flex-preferred-size: 20%;
        flex-basis: 20%;
    -webkit-box-flex: 0;
        -ms-flex-positive: 0;
            flex-grow: 0;
  }
}
@media only screen and (min-width: 1201px) {
  .header__logo {
    -ms-flex-preferred-size: 25%;
        flex-basis: 25%;
  }
}
.header__logo .icon {
  -webkit-transition: all 300ms ease-in-out;
  transition: all 300ms ease-in-out;
}
.header--product-configurator, .header--dealer-search, .header--checkout {
  -webkit-box-shadow: none;
          box-shadow: none;
}
@media only screen and (min-width: 550px) {
  .header--product-configurator, .header--dealer-search, .header--checkout {
    -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0;
            box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0;
  }
}
.header__logo-product-configurator, .header__logo-dealer-search-registration, .header__logo-checkout {
  -ms-flex-preferred-size: auto;
      flex-basis: auto;
}
.header__logo-product-configurator.logo, .header__logo-dealer-search-registration.logo, .header__logo-checkout.logo {
  margin-bottom: 1rem;
}
.header__logo-product-configurator.logo__logo, .header__logo-dealer-search-registration.logo__logo, .header__logo-checkout.logo__logo {
  width: 7rem;
}
@media only screen and (min-width: 768px) {
  .header__logo-product-configurator.logo__logo, .header__logo-dealer-search-registration.logo__logo, .header__logo-checkout.logo__logo {
    width: 9rem;
  }
}
.header__logo-product-configurator.logo {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  margin: 1rem 0 1.5rem;
}
.header__main {
  position: relative;
  min-height: 9.3333333333rem;
  -webkit-transition: min-height 300ms ease-in-out;
  transition: min-height 300ms ease-in-out;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  padding: 0px 7px 7px;
  padding: 0rem 0.4666666667rem 0.4666666667rem;
}
@media only screen and (min-width: 375px) {
  .header__main {
    padding: 15px 15px 15px;
    padding: 1rem 1rem 1rem;
  }
}
@media only screen and (min-width: 550px) {
  .header__main {
    min-height: 10.4666666667rem;
  }
}
@media only screen and (min-width: 768px) {
  .header__main {
    min-height: 11.4666666667rem;
  }
}
@media only screen and (min-width: 1025px) {
  .header__main {
    min-height: 7.6rem;
    padding: 15px 15px 0px;
    padding: 1rem 1rem 0rem;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
  }
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .header__main {
    /* stylelint-disable-next-line declaration-no-important */
    -webkit-box-align: center !important;
        -ms-flex-align: center !important;
            align-items: center !important;
  }
}
@media only screen and (min-width: 1215px) {
  .header__main {
    padding: 15px 0px 0px;
    padding: 1rem 0rem 0rem;
  }
}
.header__main--dealer-search-registration, .header__main--country-select-page, .header__main--product-configurator-page, .header__main--checkout {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  position: relative;
  padding-bottom: 1rem;
  padding-top: 1rem;
  min-height: 0;
}
@media only screen and (min-width: 1025px) {
  .header__main--dealer-search-registration, .header__main--country-select-page, .header__main--product-configurator-page, .header__main--checkout {
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
  }
}
.header__main--product-configurator-page, .header__main--dealer-search-registration, .header__main--country-select-page {
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
}
.header__main--product-configurator-page .header__logo, .header__main--dealer-search-registration .header__logo, .header__main--country-select-page .header__logo {
  position: relative;
}
.header__main--product-configurator-partner {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  min-height: 6rem;
  max-height: 6rem;
  height: 6rem;
  padding-bottom: 0.5rem;
}
@media only screen and (min-width: 768px) {
  .header__main--product-configurator-partner {
    min-height: 7rem;
    max-height: 7rem;
    height: 7rem;
  }
}
@media only screen and (min-width: 1024px) {
  .header__main--product-configurator-partner {
    min-height: 8rem;
    max-height: 8rem;
    height: 8rem;
  }
}
.header__main--product-configurator-partner .header__logo-product-configurator {
  margin: 0;
  height: auto;
}
.header__main--product-configurator-partner .header__logo-product-configurator-partner img {
  max-height: 3rem;
  padding: 0.5rem 0 0.5rem 0;
  margin: 0 0 0 1.5rem;
}
@media only screen and (min-width: 550px) {
  .header__main--product-configurator-partner .header__logo-product-configurator-partner img {
    max-height: 4rem;
  }
}
@media only screen and (min-width: 768px) {
  .header__main--product-configurator-partner .header__logo-product-configurator-partner img {
    max-height: 5rem;
  }
}
@media only screen and (min-width: 1024px) {
  .header__main--product-configurator-partner .header__logo-product-configurator-partner img {
    max-height: 6rem;
  }
}
.header__main--product-configurator-partner .header__logo-product-configurator:not(.header__logo-product-configurator-partner) {
  position: relative;
}
.header__main--product-configurator-partner .header__logo-product-configurator:not(.header__logo-product-configurator-partner)::after {
  position: absolute;
  content: "";
  height: calc(100% - 0.5rem);
  width: 1px;
  right: 0;
  top: 0.25rem;
  background-color: #d0d0d0;
  color: #4b4b4d;
}
.header__main--product-configurator-partner .header__logo-product-configurator:not(.header__logo-product-configurator-partner)::after svg {
  fill: #4b4b4d;
}
@media only screen and (min-width: 550px) {
  .header__main--product-configurator-partner .header__logo-product-configurator:not(.header__logo-product-configurator-partner)::after {
    height: calc(100% - 1rem);
    top: 0.5rem;
  }
}
.header__main--product-configurator-partner .icon--logo {
  position: relative;
  min-height: 3rem;
  max-height: 3rem;
  height: 3rem;
  padding: 0.5rem 0 0.5rem 0;
  margin: 0;
}
@media only screen and (min-width: 551px) and (max-width: 1023px) {
  .header__main--product-configurator-partner .icon--logo {
    margin: 0 1.5rem 0 0;
  }
}
@media only screen and (min-width: 550px) {
  .header__main--product-configurator-partner .icon--logo {
    min-height: 4rem;
    max-height: 4rem;
    height: 4rem;
  }
}
@media only screen and (min-width: 768px) {
  .header__main--product-configurator-partner .icon--logo {
    min-height: 5rem;
    max-height: 5rem;
    height: 5rem;
  }
}
@media only screen and (min-width: 1024px) {
  .header__main--product-configurator-partner .icon--logo {
    min-height: 6rem;
    max-height: 6rem;
    height: 6rem;
  }
}
@media only screen and (max-width: 1024px) {
  .header__main--reduced .header__logo {
    -ms-flex-preferred-size: 100%;
        flex-basis: 100%;
    text-align: left;
    right: 1rem;
    width: 100%;
    left: 1rem;
  }
  .header__main--reduced .header__logo .icon--logo {
    max-width: 29%;
    width: 6rem;
  }
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) and (max-width: 1024px) {
  .header__main--reduced {
    min-height: 9rem;
  }
}
.header__main--reduced .suggest-search__container {
  left: auto;
}
@media only screen and (min-width: 768px) {
  .header__main--reduced .suggest-search__container {
    -webkit-transform: translateX(0);
            transform: translateX(0);
  }
}
@media only screen and (min-width: 1025px) {
  .header__main--reduced .suggest-search__container {
    -webkit-transform: translateX(-64.5%);
            transform: translateX(-64.5%);
  }
}
@media only screen and (min-width: 1200px) {
  .header__main--reduced .suggest-search__container {
    -webkit-transform: translateX(-65%);
            transform: translateX(-65%);
  }
}
@media only screen and (max-width: 1024px) {
  .header .user-navigation {
    position: absolute;
    top: 0;
    right: 1rem;
  }
}
.header .user-navigation__item--search {
  opacity: 0;
  -webkit-transition: all 300ms ease-in-out;
  transition: all 300ms ease-in-out;
  pointer-events: none;
}
.header__search {
  opacity: 1;
  width: 70%;
}
@media only screen and (max-width: 1024px) {
  .header__search {
    position: absolute;
    right: 1rem;
    bottom: 1rem;
    -webkit-transition: all 300ms ease-in-out;
    transition: all 300ms ease-in-out;
  }
}
@media only screen and (min-width: 550px) {
  .header__search {
    width: 80%;
  }
}
@media only screen and (min-width: 768px) {
  .header__search {
    width: 90%;
  }
}
@media only screen and (min-width: 1025px) {
  .header__search {
    -ms-flex-preferred-size: 35%;
        flex-basis: 35%;
    -ms-flex-negative: 0;
        flex-shrink: 0;
    -webkit-box-ordinal-group: 3;
        -ms-flex-order: 2;
            order: 2;
  }
}
.header__search .input-button {
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
}
.header__login {
  margin-right: -0.3333333333rem;
}
@media only screen and (min-width: 1025px) {
  .header__login {
    margin-right: 0;
    margin-left: 1.875rem;
  }
}
.header__navigation {
  display: none;
}
@media only screen and (min-width: 1025px) {
  .header__navigation {
    display: block;
    background: #fff;
  }
  .header__navigation .container {
    padding: 0;
  }
}
@media only screen and (max-width: 1024px) {
  .header__actions {
    left: 1rem;
    bottom: 1rem;
    position: absolute;
    -webkit-transition: all 300ms ease-in-out;
    transition: all 300ms ease-in-out;
  }
}
@media only screen and (min-width: 1025px) {
  .header__actions {
    display: none;
  }
}
.header__actions .icon-button {
  margin-top: -0.75rem;
}
.header__actions .icon-button__icon svg {
  width: 1.3333333333rem;
  height: 1.3333333333rem;
}
.header__actions .icon-button--has-label {
  -webkit-box-align: end;
      -ms-flex-align: end;
          align-items: flex-end;
  top: 0;
  height: 3.3333333333rem;
}
@media only screen and (min-width: 1025px) {
  .header__actions .icon-button--has-label {
    height: inherit;
  }
}
.header__actions .icon-button--has-label .label {
  bottom: 0;
}
@media only screen and (min-width: 1025px) {
  .header__actions .icon-button--has-label .label {
    bottom: -1.5rem;
  }
}
.header__actions-item {
  color: #000;
}
.header__user {
  padding-left: 1.3333333333rem;
}
@media only screen and (min-width: 1025px) {
  .header__user {
    display: none;
  }
}
.header__user-nav {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
  -ms-flex-preferred-size: 71%;
      flex-basis: 71%;
}
@media only screen and (min-width: 1025px) {
  .header__user-nav {
    -ms-flex-preferred-size: 45%;
        flex-basis: 45%;
    -webkit-box-ordinal-group: 4;
        -ms-flex-order: 3;
            order: 3;
  }
}
@media only screen and (min-width: 1201px) {
  .header__user-nav {
    -ms-flex-preferred-size: 40%;
        flex-basis: 40%;
  }
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) and (min-width: 1201px) {
  .header__user-nav {
    -ms-flex-preferred-size: 38%;
        flex-basis: 38%;
  }
}
.header__back {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  color: #b2b2b2;
  font-size: 0.8rem;
  line-height: 0.8666666667rem;
  text-align: center;
  font-weight: 500;
}
@media only screen and (min-width: 1025px) {
  .header__back {
    display: inline-block;
    -webkit-transition: border-color 250ms ease-in-out, color 250ms ease-in-out;
    transition: border-color 250ms ease-in-out, color 250ms ease-in-out;
    padding: 0.6666666667rem 2rem;
    border: 0.0666666667rem solid #d0d0d0;
    border-radius: 10px;
    font-size: 0.9333333333rem;
    line-height: 1.2rem;
    text-align: left;
  }
  .header__back:hover, .header__back:focus {
    border-color: #fecc00;
    color: #fecc00;
  }
}
.header__checkout-secure {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  color: #b2b2b2;
  font-size: 0.6666666667rem;
  line-height: 0.8rem;
  font-weight: 500;
}
@media only screen and (min-width: 768px) {
  .header__checkout-secure {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    font-size: 0.9333333333rem;
    line-height: 1rem;
  }
}
.header__checkout-secure-text {
  text-align: center;
}
@media only screen and (min-width: 768px) {
  .header__checkout-secure-text {
    padding-left: 0.6rem;
  }
}
.header--is-collapsed {
  z-index: 700;
}
.header--is-collapsed .logo {
  position: relative;
}
@media only screen and (min-width: 0) and (max-width: 1024px) {
  .header--is-collapsed .logo {
    left: 3.3333333333rem;
  }
  .header--is-collapsed .logo__logo {
    width: 8rem;
    height: 4.6666666667rem;
  }
}
@media only screen and (max-width: 1024px) {
  .header--is-collapsed .header__search {
    opacity: 0;
    pointer-events: none;
  }
}
@media only screen and (max-width: 1024px) {
  .header--is-collapsed .header__actions {
    bottom: 0.5rem;
  }
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) and (max-width: 1024px) {
  .header--is-collapsed .header__actions {
    /* stylelint-disable-next-line declaration-no-important */
    bottom: 1rem !important;
  }
}
@media all and (max-width: 1024px) {
  @supports (-ms-ime-align: auto) {
    .header--is-collapsed .header__actions {
      /* stylelint-disable-next-line declaration-no-important */
      bottom: 1rem !important;
    }
  }
}
.header--is-collapsed .header__main {
  padding-bottom: 0;
}
@media only screen and (max-width: 1024px) {
  .header--is-collapsed .header__main {
    min-height: 4.6666666667rem;
  }
}
.header--is-collapsed .header__main--product-configurator-partner {
  margin-bottom: 0;
}
@media only screen and (max-width: 1023px) {
  .header--is-collapsed .header__main--reduced .header__logo {
    -ms-flex-preferred-size: 100%;
        flex-basis: 100%;
    text-align: center;
    right: 1rem;
    position: absolute;
  }
}
.header--is-collapsed .header__user-nav {
  padding-top: 0;
}
@media only screen and (max-width: 1024px) {
  .header--is-collapsed .header__user-nav .icon-button__text {
    /* stylelint-disable-next-line declaration-no-important */
    display: none !important;
  }
}
@media only screen and (min-width: 550px) and (max-width: 1025px) {
  .header--is-collapsed .header__user-nav .icon-button {
    height: 5.3333333333rem;
  }
  .header--is-collapsed .header__user-nav .cart-items-counter__quantity {
    top: 0.25rem;
    right: 0;
  }
}
@media only screen and (max-width: 1024px) {
  .header--is-collapsed .header__top {
    max-height: 0;
    opacity: 0;
    -webkit-transform: translate3d(0, -2.5333333333rem, 0);
            transform: translate3d(0, -2.5333333333rem, 0);
  }
}
@media only screen and (min-width: 1025px) {
  .header--is-collapsed .header__top {
    display: block;
  }
}
.header--is-collapsed.header--desktop .header__top {
  max-height: 0;
  opacity: 0;
  -webkit-transform: translate3d(0, -2.5333333333rem, 0);
          transform: translate3d(0, -2.5333333333rem, 0);
}
.header--is-collapsed.header--desktop .header__user-nav .icon-button__text {
  /* stylelint-disable-next-line declaration-no-important */
  display: none !important;
}
.header--is-collapsed .user-navigation__item--search {
  opacity: 1;
  pointer-events: all;
}
@media only screen and (min-width: 1025px) {
  .header--is-collapsed {
    z-index: 400;
  }
  .header--is-collapsed.header--desktop {
    position: fixed;
  }
  .header--is-collapsed.header--desktop .header__logo .icon {
    width: 70%;
    height: 4rem;
  }
  .header--is-collapsed.header--desktop .header__main {
    min-height: auto;
    padding: 0;
    padding-top: 1rem;
  }
  .header--is-collapsed.header--desktop .header__user-nav {
    margin-top: auto;
  }
  .header--is-collapsed.header--desktop .user-navigation__sub-nav {
    margin-top: 0;
  }
}
.header--is-fixed {
  position: fixed;
  width: 100%;
  z-index: 399;
}
.header--product-configurator.header--is-collapsed {
  z-index: 1400;
}
.header--product-configurator.header--is-collapsed .header__top {
  max-height: 0;
  opacity: 0;
  -webkit-transform: translate3d(0, -2.5333333333rem, 0);
          transform: translate3d(0, -2.5333333333rem, 0);
}
.header--product-configurator.header--is-collapsed .logo {
  left: 0;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.navigation-top {
  white-space: nowrap;
  line-height: 2;
}
@media only screen and (min-width: 768px) {
  .navigation-top {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -ms-flex-wrap: wrap;
        flex-wrap: wrap;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
    -ms-flex-direction: nowrap;
        flex-direction: nowrap;
  }
}
@media only screen and (min-width: 1200px) {
  .navigation-top {
    padding: 0;
  }
}
.navigation-top__logo .icon {
  height: 2.5333333333rem;
  width: 13.3333333333rem;
  padding: 0.25rem;
}
.navigation-top__list {
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  overflow: hidden;
}
@media only screen and (min-width: 1024px) {
  .navigation-top__list {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -ms-flex-wrap: wrap;
        flex-wrap: wrap;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
  }
}
.navigation-top__list-checkout {
  -ms-flex-preferred-size: 100%;
      flex-basis: 100%;
}
.navigation-top__item {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.navigation-top__carousel {
  width: 100%;
  margin-left: auto;
  margin-right: auto;
  max-width: initial;
}
.navigation-top__carousel .slick-slide {
  text-align: center;
}
@media only screen and (min-width: 550px) {
  .navigation-top__carousel .slick-slide {
    width: 100%;
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .navigation-top__carousel .slick-slide > div {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -ms-flex-wrap: wrap;
        flex-wrap: wrap;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
  }
}
@media only screen and (min-width: 550px) {
  .navigation-top__internationalization {
    padding-left: 1rem;
    -ms-flex-preferred-size: 30%;
        flex-basis: 30%;
  }
}
@media only screen and (min-width: 1024px) {
  .navigation-top__internationalization {
    -ms-flex-preferred-size: 20%;
        flex-basis: 20%;
  }
}
@media only screen and (min-width: 1024px) {
  .navigation-top .icon {
    -webkit-box-pack: start;
        -ms-flex-pack: start;
            justify-content: flex-start;
  }
}
.navigation-top .icon svg {
  margin-right: 0.5rem;
  min-width: unset;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.notification-area {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 600;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.section {
  padding: 1.4666666667rem 0;
}
@media only screen and (min-width: 768px) {
  .section {
    padding: 3.2rem 0;
  }
}
.section--no-padding-top {
  padding-top: 0;
}
.section--no-padding-bottom {
  padding-bottom: 0;
}
@media only screen and (min-width: 1024px) {
  .section--login-page {
    border-left-width: 1px;
    border-style: solid;
    border-color: #d0d0d0;
  }
}
@media only screen and (min-width: 1024px) {
  .section--login-page .section__title {
    padding: 0 1.5rem;
  }
}
@media only screen and (min-width: 1024px) {
  .section--dealer-container, .section--contact-container {
    padding: 0 1.5rem;
  }
}
.section--contact-container {
  border-top-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  padding-top: 1.5rem;
  margin-top: 1.5rem;
}
.section--center {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-flow: row nowrap;
          flex-flow: row nowrap;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
}
.section--center__inner {
  -webkit-box-flex: 0;
      -ms-flex: none;
          flex: none;
}
.section--last {
  padding-bottom: 4.6666666667rem;
}
@media only screen and (min-width: 768px) {
  .section--last {
    padding-bottom: 6.4rem;
  }
}
.section--secondary {
  padding: 2.1333333333rem 0 1.0666666667rem;
}
@media only screen and (min-width: 768px) {
  .section--secondary {
    padding-top: 3.3333333333rem;
  }
}
@media only screen and (min-width: 1024px) {
  .section--secondary {
    padding-top: 4.6666666667rem;
  }
}
.section--bg-dark {
  padding: 1.4666666667rem 0 1.2666666667rem;
  background-color: #1a171b;
}
@media only screen and (min-width: 768px) {
  .section--bg-dark {
    padding: 3.3333333333rem 0 5.3333333333rem;
  }
  .section--bg-dark .product-card__container {
    background-color: #fff;
  }
}
.section--bg-dark .product-card {
  padding-bottom: 1rem;
}
@media only screen and (min-width: 768px) {
  .section--bg-dark .product-card {
    padding-bottom: 2rem;
  }
}
.section--bg-dark .product-card__image-wrap {
  background-color: #fff;
}
.section--bg-dark .product-card__image-wrap::before {
  background: transparent;
}
.section--bg-dark .product-card__overlay::before {
  background-color: rgba(255, 255, 255, 0);
}
.section--full-width {
  margin-left: -15px;
  margin-right: -15px;
}
.section--no-mobile-bottom-indent {
  padding-bottom: 0;
}
@media only screen and (min-width: 768px) {
  .section--no-mobile-bottom-indent {
    padding-bottom: 1.0666666667rem;
  }
}
.section__title {
  margin-bottom: 1.0666666667rem;
}
@media only screen and (min-width: 1024px) {
  .section__title {
    margin-bottom: 1.6rem;
  }
}
.section__title--secondary {
  color: #929292;
  text-align: center;
}
.section__title--mobile-center {
  text-align: center;
}
@media only screen and (min-width: 768px) {
  .section__title--mobile-center {
    text-align: left;
  }
}
.section__sub-title, .section__text {
  color: #d0d0d0;
  text-align: center;
  line-height: normal;
  margin-bottom: 1.7333333333rem;
}
@media only screen and (min-width: 768px) {
  .section__sub-title, .section__text {
    margin-bottom: 2.6666666667rem;
  }
}
.section__sub-title {
  font-size: 1rem;
}
@media only screen and (min-width: 768px) {
  .section__sub-title {
    font-size: 2.4rem;
  }
}
.section__text {
  font-size: 1rem;
  line-height: 1.61;
  max-width: 64.6666666667rem;
}
@media only screen and (min-width: 768px) {
  .section__text {
    font-size: 2.4rem;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.side-drawer {
  position: relative;
  z-index: 701;
}
@media only screen and (min-width: 1025px) {
  .side-drawer {
    display: none;
  }
}
.side-drawer__overlay {
  pointer-events: none;
  visibility: hidden;
  opacity: 0;
  -webkit-transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  background-color: rgba(111, 111, 111, 0.4);
}
.side-drawer__drawer {
  -webkit-box-shadow: 0 2px 5px 1px rgba(0, 0, 0, 0.2);
          box-shadow: 0 2px 5px 1px rgba(0, 0, 0, 0.2);
  pointer-events: none;
  visibility: hidden;
  opacity: 0;
  -webkit-transition: left 250ms ease-in-out, visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  transition: left 250ms ease-in-out, visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  position: fixed;
  top: 0;
  left: -25rem;
  width: 100%;
  height: 100%;
  background-color: #fff;
  overflow: hidden;
}
@media only screen and (min-width: 550px) {
  .side-drawer__drawer {
    width: 25rem;
  }
}
@media only screen and (min-width: 768px) {
  .side-drawer__drawer--logged {
    padding-top: 3.3333333333rem;
  }
}
.side-drawer__holder {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  overflow: hidden;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}
.side-drawer__navigation-top {
  padding-left: 1rem;
  padding-right: 1rem;
  line-height: 2rem;
}
@media only screen and (min-width: 768px) {
  .side-drawer__navigation-top-actions {
    display: none;
  }
}
.side-drawer__close-row {
  border-top-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  line-height: 3rem;
}
.side-drawer__close {
  background-color: #fff;
  color: #4b4b4d;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  font-size: 1.3333333333rem;
  padding-left: 1rem;
  padding-right: 1rem;
  cursor: pointer;
}
.side-drawer__close svg {
  fill: #4b4b4d;
}
.side-drawer__close svg {
  width: 1.3333333333rem;
  height: 1.3333333333rem;
  margin-left: 0.5rem;
}
.side-drawer__close-label {
  font-size: 1rem;
}
.side-drawer__user-link {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: end;
      -ms-flex-align: end;
          align-items: flex-end;
  padding: 0.8rem 0;
  font-weight: 700;
  line-height: 1.0666666667rem;
  font-size: 0.6666666667rem;
  letter-spacing: 0.04rem;
  text-transform: uppercase;
}
.side-drawer__user-link-icon {
  margin-right: 0.6666666667rem;
}
.side-drawer__navigation {
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
  position: relative;
}
.side-drawer__info {
  -ms-flex-negative: 0;
      flex-shrink: 0;
  padding-bottom: 1.6666666667rem;
}
.side-drawer__contact {
  display: block;
  padding: 1.0666666667rem 1rem 1.0666666667rem 4.2666666667rem;
  border-radius: 0.1333333333rem;
  border: 0.0666666667rem solid #ececec;
  color: #d0d0d0;
  position: relative;
}
.side-drawer__contact-icon {
  position: absolute;
  left: 1.3333333333rem;
  top: 50%;
  -webkit-transform: translateY(-50%);
          transform: translateY(-50%);
}
.side-drawer__contact-text {
  display: block;
  font-size: 0.9333333333rem;
  line-height: 1.2;
}
.side-drawer__contact-text--weight {
  font-weight: 500;
}
.side-drawer--show .side-drawer__overlay {
  pointer-events: all;
  visibility: visible;
  opacity: 1;
}
.side-drawer--show .side-drawer__drawer {
  pointer-events: all;
  visibility: visible;
  opacity: 1;
  left: 0;
  top: 0;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-bundle {
  margin: 0 auto 6rem;
}
.product-bundle--configurator {
  max-width: 100%;
  margin: 0;
  padding-bottom: 0.7333333333rem;
}
.product-bundle--cart {
  max-width: none;
  margin: 0;
}
.product-bundle__title {
  text-align: center;
  font-size: 1.6rem;
  color: #6f6f6f;
  margin-bottom: 0.9333333333rem;
}
@media only screen and (min-width: 768px) {
  .product-bundle__title {
    font-size: 2.1333333333rem;
    margin-bottom: 1.4666666667rem;
  }
}
.product-bundle__item--configurator {
  padding-bottom: 0.6666666667rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
.product-bundle__img-block {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  padding: 0.6666666667rem;
  height: 21.3333333333rem;
  position: relative;
  margin-bottom: 1.0666666667rem;
}
.product-bundle__img-block::before {
  content: "";
  position: absolute;
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  background: rgba(26, 23, 27, 0.1);
}
.product-bundle__img-block--configurator {
  padding: 0.3333333333rem;
  min-width: 4.6666666667rem;
  width: 4.6666666667rem;
  height: 4.6666666667rem;
  margin: 0 1.3333333333rem 0 0;
}
.product-bundle__img {
  max-width: 100%;
  max-height: 100%;
}
.product-bundle__info {
  min-height: 6.3333333333rem;
  padding-bottom: 0.3333333333rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
}
@media only screen and (min-width: 768px) {
  .product-bundle__info {
    display: block;
  }
}
.product-bundle__info--configurator {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  padding: 0;
  min-height: 0;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
}
.product-bundle__name {
  font-size: 1rem;
  font-weight: 500;
  line-height: 1.2666666667rem;
  color: #6f6f6f;
}
.product-bundle__quantity {
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.2666666667rem;
  color: #b2b2b2;
  padding-left: 1rem;
  white-space: nowrap;
}
@media only screen and (min-width: 768px) {
  .product-bundle__quantity {
    display: block;
    padding-left: 0;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-bundle-detail {
  border-bottom: solid 1px #4b4b4d;
}
.product-bundle-detail__item {
  border-top: solid 1px #4b4b4d;
}
.product-bundle-detail__title {
  font-size: 0.9333333333rem;
  font-weight: 400;
  line-height: normal;
  color: #6f6f6f;
  padding: 1.2rem 1.3333333333rem;
  cursor: pointer;
  position: relative;
}
.product-bundle-detail__title::before, .product-bundle-detail__title::after {
  content: "";
  position: absolute;
  background: #6f6f6f;
  top: 50%;
  -webkit-transform: translateY(-50%);
          transform: translateY(-50%);
}
.product-bundle-detail__title::before {
  width: 10px;
  height: 2px;
  right: 19px;
}
.product-bundle-detail__title::after {
  width: 2px;
  height: 10px;
  right: 23px;
}
.product-bundle-detail__title.active {
  background-color: #1a171b;
}
.product-bundle-detail__title.active::after {
  display: none;
}
.product-bundle-detail__description {
  font-size: 0.8666666667rem;
  font-weight: 400;
  color: #6f6f6f;
  padding: 0 1.3333333333rem 1.7333333333rem;
  background-color: #1a171b;
}
.product-bundle-detail__detail-list {
  background-color: #1a171b;
  padding: 0 1.3333333333rem 1.2rem;
}
.product-bundle-detail__detail-list-key {
  font-size: 0.9333333333rem;
  font-weight: 700;
  color: #6f6f6f;
}
.product-bundle-detail__detail-list-value {
  font-size: 0.8666666667rem;
  font-weight: 400;
  color: #b2b2b2;
  padding-bottom: 8px;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-cms {
  background: #1a171b;
  text-align: center;
  padding: 2.2rem 0 2.6666666667rem;
}
@media only screen and (min-width: 768px) {
  .product-cms {
    padding: 3.3333333333rem 0 1.3333333333rem;
  }
}
.product-cms__title {
  max-width: 970px;
  margin: 0 auto 1.0666666667rem;
  color: #6f6f6f;
  font-size: 1.8666666667rem;
}
@media only screen and (min-width: 768px) {
  .product-cms__title {
    font-size: 2.1333333333rem;
    margin: 0 auto 1.6rem;
  }
}
.product-cms__text {
  max-width: 970px;
  margin: 0 auto;
  font-size: 1rem;
  line-height: 1.7333333333rem;
  color: #d0d0d0;
}
@media only screen and (min-width: 768px) {
  .product-cms__text {
    font-size: 1.2rem;
    line-height: 1.9333333333rem;
  }
}
.product-cms__text p {
  margin: 0 0 1.0666666667rem;
}
@media only screen and (min-width: 768px) {
  .product-cms__text p {
    margin: 0 0 1.9333333333rem;
  }
}
.product-cms__text a {
  color: #b2b2b2;
  font-weight: 700;
}
.product-cms__text a:hover {
  color: #4b4b4d;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-configurator {
  display: block;
  padding: 3rem 1rem 1rem;
  margin: 0 -1rem;
  border-bottom: solid 1px #4b4b4d;
}
@media only screen and (min-width: 768px) {
  .product-configurator {
    padding: 1.4666666667rem 0 0;
    margin: 0;
    border-bottom: 0;
  }
}
.product-configurator__show-more-details-button {
  white-space: nowrap;
}
.product-configurator__show-more-details-button .icon--caret-right {
  margin-top: 0;
  margin-left: 0.25rem;
}
.product-configurator .headline {
  margin-bottom: 0.5rem;
  line-height: 3rem;
  word-break: break-word;
}
@media only screen and (max-width: 767px) {
  .product-configurator__top-block {
    background: #4b4b4d;
    padding: 1rem;
    margin: 0 -1rem;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
  }
}
.product-configurator__brand-name {
  font-size: 1.0666666667rem;
  font-weight: 500;
  line-height: 1.5333333333rem;
  color: #6f6f6f;
  text-align: right;
}
@media only screen and (min-width: 768px) {
  .product-configurator__brand-name {
    font-size: 1.2rem;
    margin-bottom: 0.2rem;
    text-align: left;
  }
}
.product-configurator__sku {
  font-size: 0.8666666667rem;
  font-weight: 400;
  line-height: normal;
  color: #b2b2b2;
  text-align: right;
}
@media only screen and (min-width: 768px) {
  .product-configurator__sku {
    font-size: 0.9333333333rem;
    margin-bottom: 1.8666666667rem;
    text-align: left;
  }
}
.product-configurator__bundle {
  margin-bottom: -1px;
}
@media only screen and (min-width: 1400px) {
  .product-configurator__sidebar {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    position: fixed;
    right: 0;
    top: 40%;
    width: 100%;
    max-width: 33.3333333333rem;
  }
  .product-configurator__sidebar > * {
    border-bottom-left-radius: 10px;
    border-top-left-radius: 10px;
    right: -27rem;
    -webkit-transition: all 1s ease-in-out;
    transition: all 1s ease-in-out;
    position: relative;
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .product-configurator__sidebar > *.show {
    right: 0;
  }
  .product-configurator__sidebar > *.grid {
    max-width: 33.3333333333rem;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-detail {
  padding-bottom: 2rem;
}
.product-detail__headline.headline {
  margin-top: 2rem;
  margin-bottom: 1rem;
  text-align: center;
}
.product-detail__headline--description.headline {
  margin-top: 2rem;
  margin-bottom: 1rem;
  text-align: center;
}
.product-detail__headline--description.headline::before {
  content: "";
  display: block;
  position: relative;
  width: 0;
  height: 17rem;
  margin-top: -17rem;
  z-index: -1;
}
@media only screen and (min-width: 768px) {
  .product-detail__headline--description.headline::before {
    height: 22rem;
    margin-top: -22rem;
  }
}
@media only screen and (min-width: 1024px) {
  .product-detail__headline--description.headline::before {
    height: 9rem;
    margin-top: -9rem;
  }
}
@media only screen and (min-width: 1024px) {
  .product-detail__description {
    -webkit-columns: 2;
       -moz-columns: 2;
            columns: 2;
  }
}
@media only screen and (max-width: 1023px) {
  .product-detail__detail-list-col {
    padding-top: 1rem;
    padding-bottom: 1rem;
  }
  .product-detail__detail-list-col:first-child {
    padding-top: 0;
  }
  .product-detail__detail-list-col:last-child {
    padding-bottom: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .product-detail__detail-list-col {
    padding-left: 0.5rem;
    padding-right: 0.5rem;
  }
  .product-detail__detail-list-col:first-child {
    padding-left: 0;
  }
  .product-detail__detail-list-col:last-child {
    padding-right: 0;
  }
}
.product-detail__detail-list {
  background-color: #fff;
}
.product-detail__detail-list-item {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: start;
      -ms-flex-align: start;
          align-items: flex-start;
  padding: 0.5rem 0;
}
.product-detail__detail-list-item:nth-child(odd) {
  background-color: #ececec;
}
.product-detail__detail-list-key {
  -ms-word-break: break-all;
  word-break: break-all;
  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
  word-break: break-word;
  -ms-hyphens: auto;
      hyphens: auto;
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
  padding-left: 0.5rem;
  font-weight: 700;
}
.product-detail__detail-list-value {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
  padding-left: 0.5rem;
  font-weight: 400;
  word-break: break-word;
}
.product-detail__show-more-details-button-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  width: 100%;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.variant {
  padding: 0 0.5rem;
}
.variant:last-child {
  margin-bottom: -0.0666666667rem;
}
.variant--promotion {
  position: relative;
  z-index: 2;
  border: none;
}
.variant--promotion:last-child {
  margin-bottom: 0;
  border-bottom: none;
}
.variant--product-set {
  border: none;
  margin-bottom: 0.5333333333rem;
}
.variant--product-set:last-child {
  border: none;
  margin-bottom: 0;
}
.variant__title {
  font-weight: 700;
  position: relative;
  margin-bottom: 0.5rem;
}
.variant__title--product-set {
  font-size: 0.9333333333rem;
  line-height: 1.8666666667rem;
}
@media only screen and (min-width: 768px) {
  .variant__title--product-set {
    font-size: 1.0666666667rem;
    line-height: 2.1333333333rem;
  }
}
.variant__selected-value {
  font-size: 0.9333333333rem;
  font-weight: 400;
  line-height: normal;
  color: #b2b2b2;
  margin: -0.3333333333rem 0 1rem;
}
.variant--reset {
  width: 100%;
  margin: 0 0.5rem;
}
.variant--reset .button {
  padding-left: 0.5rem;
}
.variant .custom-select.selected {
  pointer-events: none;
}
.variant .custom-select.selected .select2-selection__rendered {
  color: #b2b2b2;
  border-color: #d0d0d0;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.quantity-option {
  font-size: 0.8666666667rem;
  font-weight: 500;
}
@media only screen and (min-width: 768px) {
  .quantity-option {
    font-size: 0.9333333333rem;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.switch {
  -webkit-transition: margin-left 250ms ease-in-out, background-color 250ms ease-in-out;
  transition: margin-left 250ms ease-in-out, background-color 250ms ease-in-out;
  display: block;
  position: relative;
  width: 2.2666666667rem;
  height: 0.9333333333rem;
  background-color: rgba(236, 236, 236, 0.6);
  border-radius: 0.4666666667rem;
  overflow: visible;
  margin: 0.2rem 0 0.2rem 0.6666666667rem;
}
.switch__handle {
  -webkit-transition: left 250ms ease-in-out, background-color 250ms ease-in-out;
  transition: left 250ms ease-in-out, background-color 250ms ease-in-out;
  display: block;
  position: absolute;
  width: 1.3333333333rem;
  height: 1.3333333333rem;
  margin: -0.2rem 0 0 -0.6666666667rem;
  border-radius: 50%;
  background-color: #fff;
  -webkit-box-shadow: 0 0.1333333333rem 0.2666666667rem rgba(178, 178, 178, 0.2);
          box-shadow: 0 0.1333333333rem 0.2666666667rem rgba(178, 178, 178, 0.2);
  left: 0;
  top: 0;
}
.switch--active {
  background-color: rgba(254, 204, 0, 0.5);
  margin-left: 0;
}
.switch--active .switch__handle {
  left: 100%;
  background-color: #fecc00;
}
.switch[disabled] {
  opacity: 0.5;
  cursor: not-allowed;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.content-collapser--full-visible .content-collapser__container {
  max-height: none;
  margin-bottom: 0;
}
.content-collapser--full-visible .content-collapser__container::after {
  display: none;
}
.content-collapser--full-visible .content-collapser__trigger-holder {
  display: none;
}
.content-collapser__container {
  position: relative;
  max-height: 14.6666666667rem;
  overflow: hidden;
}
@media only screen and (min-width: 768px) {
  .content-collapser__container {
    max-height: none;
  }
}
.content-collapser__container::after {
  content: "";
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 5.3333333333rem;
  -webkit-box-shadow: inset 0 -3.3333333333rem 5.3333333333rem 0 #fff;
          box-shadow: inset 0 -3.3333333333rem 5.3333333333rem 0 #fff;
}
@media only screen and (min-width: 768px) {
  .content-collapser__container::after {
    display: none;
  }
}
.content-collapser__container--with-background::after {
  -webkit-box-shadow: inset 0 -3.3333333333rem 5.3333333333rem 0 #1a171b;
          box-shadow: inset 0 -3.3333333333rem 5.3333333333rem 0 #1a171b;
}
.content-collapser__trigger-holder {
  text-align: center;
  padding-bottom: 1.7333333333rem;
  padding-top: 1.7333333333rem;
}
.content-collapser__trigger-holder--with-background {
  background: #1a171b;
}
@media only screen and (min-width: 768px) {
  .content-collapser__trigger-holder {
    display: none;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.copyright-build-with {
  font: 700 0.8rem/1rem "Lato", sans-serif;
  letter-spacing: 0.0446666667rem;
  text-transform: uppercase;
  padding-top: 1.2666666667rem;
  padding-bottom: 1.4rem;
  position: relative;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
}
.copyright-build-with__text {
  margin-right: 1.2rem;
  padding-top: 0.8rem;
}
.copyright-build-with__link {
  color: #fff;
}
.copyright-build-with__link:hover, .copyright-build-with__link:focus {
  color: #fff;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.custom-select {
  position: relative;
  max-width: 100%;
  display: inline-block;
}
.custom-select__select {
  background-color: #fff;
  color: #4b4b4d;
  border-radius: 10px;
  border: 0.0666666667rem solid #ececec;
  color: #6f6f6f;
  font: 400 1rem/3.0666666667rem "Lato", sans-serif;
  font-size: 0.8666666667rem;
  padding: 0 2.3333333333rem 0 1.0666666667rem;
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
}
.custom-select__select svg {
  fill: #4b4b4d;
}
@media only screen and (min-width: 768px) {
  .custom-select__select {
    padding: 0 3rem 0 1.3333333333rem;
    font-size: 0.9333333333rem;
  }
}
.custom-select__caret {
  position: absolute;
  z-index: 1;
  top: 50%;
  right: 1.0666666667rem;
  width: auto;
  height: 100%;
  -webkit-transform: translateY(-50%);
          transform: translateY(-50%);
  pointer-events: none;
}
.custom-select__caret svg {
  width: 1.3333333333rem;
  height: 1.3333333333rem;
}
@media only screen and (min-width: 768px) {
  .custom-select__caret {
    right: 1.4rem;
  }
}
.custom-select--different-mob-caret .custom-select__caret {
  width: 0.4666666667rem;
  height: 0.7333333333rem;
}
@media only screen and (min-width: 768px) {
  .custom-select--different-mob-caret .custom-select__caret {
    width: 0.8rem;
    height: 0.4666666667rem;
  }
}
.custom-select--alternative {
  text-transform: uppercase;
  width: 100%;
}
@media only screen and (min-width: 768px) {
  .custom-select--alternative {
    width: auto;
  }
}
.custom-select--alternative .custom-select__select {
  width: 100%;
  font-size: 0.8rem;
  line-height: 2.5333333333rem;
  padding: 0 1.3333333333rem 0 0.6666666667rem;
  border: 0.0666666667rem solid #ececec;
  color: #6f6f6f;
  background: #4b4b4d;
}
@media only screen and (min-width: 768px) {
  .custom-select--alternative .custom-select__select {
    width: auto;
    text-transform: uppercase;
    border-radius: 0;
    background: rgba(255, 255, 255, 0);
    border: none;
    color: #929292;
    font-size: 0.7333333333rem;
    line-height: 2.6666666667rem;
    font-weight: 700;
    letter-spacing: 0.04rem;
    padding: 0 2rem 0 1.2rem;
  }
}
.custom-select--alternative .custom-select__caret {
  width: 0.4666666667rem;
  height: 0.7333333333rem;
  right: 0.6666666667rem;
}
@media only screen and (min-width: 768px) {
  .custom-select--alternative .custom-select__caret {
    right: 0.8666666667rem;
    width: 0.4666666667rem;
    height: 0.2666666667rem;
    -webkit-transform: translateY(-0.1333333333rem);
            transform: translateY(-0.1333333333rem);
  }
}
.custom-select--small .custom-select__select {
  font-size: 0.8666666667rem;
  line-height: 2.5333333333rem;
  font-weight: 500;
}
@media only screen and (min-width: 768px) {
  .custom-select--small .custom-select__select {
    font-size: 0.9333333333rem;
    font-weight: 400;
  }
}
.custom-select--mobile-expand {
  width: 100%;
}
@media only screen and (min-width: 768px) {
  .custom-select--mobile-expand {
    width: auto;
  }
}
.custom-select--mobile-expand .custom-select__select {
  width: 100%;
  height: 100%;
}
@media only screen and (min-width: 768px) {
  .custom-select--mobile-expand .custom-select__select {
    width: auto;
  }
}
.custom-select--full-width {
  width: 100%;
}
.custom-select--full-width .custom-select__select {
  width: 100%;
  height: 100%;
}
.custom-select--margin-bottom {
  margin-bottom: 1.4rem;
}
.custom-select--light .custom-select__select,
.custom-select--light .select2-selection__rendered {
  background-color: #fff;
  color: #4b4b4d;
}
.custom-select--light .custom-select__select svg,
.custom-select--light .select2-selection__rendered svg {
  fill: #4b4b4d;
}
.custom-select--error .select2-selection__rendered {
  border-color: #e32213;
}

.select2-selection__rendered {
  background-color: #fff;
  color: #4b4b4d;
  border-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  display: block;
  border-radius: 10px;
  color: #6f6f6f;
  font: 400 1rem/3.0666666667rem "Lato", sans-serif;
  padding: 0 3rem 0 1.3333333333rem;
  cursor: pointer;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.select2-selection__rendered svg {
  fill: #4b4b4d;
}
.select2-selection__arrow {
  display: none;
}
.select2-hidden-accessible {
  border: 0;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  height: 0.0666666667rem;
  overflow: hidden;
  padding: 0;
  position: absolute;
  width: 0.0666666667rem;
  white-space: nowrap;
}
.select2-container {
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  display: inline-block;
  margin: 0;
  position: relative;
  vertical-align: middle;
}
.select2-container--alternative .select2-selection__rendered {
  border-radius: 0;
  border: none;
  color: #929292;
  background: none;
  font-size: 0.7333333333rem;
  line-height: 2.6666666667rem;
  font-weight: 700;
  letter-spacing: 0.04rem;
  padding: 0 2rem 0 1.2rem;
}
.select2-container--alternative .select2-dropdown {
  padding: 0.7333333333rem 0 0.8rem 1.2666666667rem;
  border-radius: 0 0 10px 10px;
  -webkit-box-shadow: 0 1.2rem 1.2rem 0 rgba(75, 75, 77, 0.2), 0 0.2rem 0.2rem 0 rgba(75, 75, 77, 0.2);
          box-shadow: 0 1.2rem 1.2rem 0 rgba(75, 75, 77, 0.2), 0 0.2rem 0.2rem 0 rgba(75, 75, 77, 0.2);
}
.select2-container--alternative .select2-results__option {
  padding: 0;
  font-size: 0.8666666667rem;
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.select2-container--alternative .select2-results__option[aria-selected=true]::before {
  display: none;
}
.select2-container--small .select2-selection__rendered {
  font-size: 0.9333333333rem;
  line-height: 2.5333333333rem;
}
.select2-container--small .select2-results__option {
  font-size: 0.9333333333rem;
}
.select2-container--disabled .select2-selection__rendered {
  color: #d0d0d0;
  border-color: #ececec;
  cursor: not-allowed;
}
.select2-container--disabled ~ .custom-select__caret {
  color: #ececec;
}
.select2-dropdown {
  border-bottom-right-radius: 10px;
  border-bottom-left-radius: 10px;
  position: absolute;
  z-index: 2001;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  display: block;
  border: none;
  margin: 0;
  padding: 1rem 1.3333333333rem 1rem 1rem;
  background: #fff;
  -webkit-box-shadow: 0 1.2rem 1.2rem 0 rgba(75, 75, 77, 0.2), 0 0.2rem 0.2rem 0 rgba(75, 75, 77, 0.2);
          box-shadow: 0 1.2rem 1.2rem 0 rgba(75, 75, 77, 0.2), 0 0.2rem 0.2rem 0 rgba(75, 75, 77, 0.2);
  max-height: 20rem;
  overflow-y: scroll;
}
.select2-search--dropdown.select2-search--hide {
  display: none;
}
.select2-results {
  display: block;
}
.select2-results__option {
  color: #b2b2b2;
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.87;
  letter-spacing: 0.0133333333rem;
  padding: 0 0 0 1.8rem;
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
}
.select2-results__option[aria-selected] {
  cursor: pointer;
}
.select2-results__option[aria-selected=true] {
  background: none;
  position: relative;
}
.select2-results__option[aria-selected=true]::before {
  content: "";
  position: absolute;
  border-left: 0.1333333333rem solid #b2b2b2;
  border-bottom: 0.1333333333rem solid #b2b2b2;
  width: 0.6666666667rem;
  height: 0.4rem;
  top: 0.6rem;
  left: 0.2rem;
  -webkit-transform: rotate(-45deg);
          transform: rotate(-45deg);
}
.select2-results__option--highlighted[aria-selected] {
  background: none;
  color: #b2b2b2;
}
.select2-results__option--highlighted[aria-selected]:hover {
  background: none;
  color: #6f6f6f;
  /* stylelint-disable-next-line max-nesting-depth */
}
.select2-results__option--highlighted[aria-selected]:hover::before {
  border-color: #6f6f6f;
}
.xdsoft_datetimepicker{-webkit-box-shadow:0 5px 15px -5px rgba(0,0,0,0.506);box-shadow:0 5px 15px -5px rgba(0,0,0,0.506);background:#fff;border-bottom:1px solid #bbb;border-left:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;padding:8px;padding-left:0;padding-top:2px;position:absolute;z-index:9999;-webkit-box-sizing:border-box;box-sizing:border-box;display:none}.xdsoft_datetimepicker.xdsoft_rtl{padding:8px 0 8px 8px}.xdsoft_datetimepicker iframe{position:absolute;left:0;top:0;width:75px;height:210px;background:transparent;border:0}.xdsoft_datetimepicker button{border:none !important}.xdsoft_noselect{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.xdsoft_noselect::-moz-selection{background:transparent}.xdsoft_noselect::selection{background:transparent}.xdsoft_noselect::-moz-selection{background:transparent}.xdsoft_datetimepicker.xdsoft_inline{display:inline-block;position:static;-webkit-box-shadow:none;box-shadow:none}.xdsoft_datetimepicker *{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0;margin:0}.xdsoft_datetimepicker .xdsoft_datepicker,.xdsoft_datetimepicker .xdsoft_timepicker{display:none}.xdsoft_datetimepicker .xdsoft_datepicker.active,.xdsoft_datetimepicker .xdsoft_timepicker.active{display:block}.xdsoft_datetimepicker .xdsoft_datepicker{width:224px;float:left;margin-left:8px}.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_datepicker{float:right;margin-right:8px;margin-left:0}.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_datepicker{width:256px}.xdsoft_datetimepicker .xdsoft_timepicker{width:58px;float:left;text-align:center;margin-left:8px;margin-top:0}.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker{float:right;margin-right:8px;margin-left:0}.xdsoft_datetimepicker .xdsoft_datepicker.active+.xdsoft_timepicker{margin-top:8px;margin-bottom:3px}.xdsoft_datetimepicker .xdsoft_monthpicker{position:relative;text-align:center}.xdsoft_datetimepicker .xdsoft_label i,.xdsoft_datetimepicker .xdsoft_prev,.xdsoft_datetimepicker .xdsoft_next,.xdsoft_datetimepicker .xdsoft_today_button{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Q0NBRjI1NjM0M0UwMTFFNDk4NkFGMzJFQkQzQjEwRUIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Q0NBRjI1NjQ0M0UwMTFFNDk4NkFGMzJFQkQzQjEwRUIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDQ0FGMjU2MTQzRTAxMUU0OTg2QUYzMkVCRDNCMTBFQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDQ0FGMjU2MjQzRTAxMUU0OTg2QUYzMkVCRDNCMTBFQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoNEP54AAAIOSURBVHja7Jq9TsMwEMcxrZD4WpBYeKUCe+kTMCACHZh4BFfHO/AAIHZGFhYkBBsSEqxsLCAgXKhbXYOTxh9pfJVP+qutnZ5s/5Lz2Y5I03QhWji2GIcgAokWgfCxNvcOCCGKqiSqhUp0laHOne05vdEyGMfkdxJDVjgwDlEQgYQBgx+ULJaWSXXS6r/ER5FBVR8VfGftTKcITNs+a1XpcFoExREIDF14AVIFxgQUS+h520cdud6wNkC0UBw6BCO/HoCYwBhD8QCkQ/x1mwDyD4plh4D6DDV0TAGyo4HcawLIBBSLDkHeH0Mg2yVP3l4TQMZQDDsEOl/MgHQqhMNuE0D+oBh0CIr8MAKyazBH9WyBuKxDWgbXfjNf32TZ1KWm/Ap1oSk/R53UtQ5xTh3LUlMmT8gt6g51Q9p+SobxgJQ/qmsfZhWywGFSl0yBjCLJCMgXail3b7+rumdVJ2YRss4cN+r6qAHDkPWjPjdJCF4n9RmAD/V9A/Wp4NQassDjwlB6XBiCxcJQWmZZb8THFilfy/lfrTvLghq2TqTHrRMTKNJ0sIhdo15RT+RpyWwFdY96UZ/LdQKBGjcXpcc1AlSFEfLmouD+1knuxBDUVrvOBmoOC/rEcN7OQxKVeJTCiAdUzUJhA2Oez9QTkp72OTVcxDcXY8iKNkxGAJXmJCOQwOa6dhyXsOa6XwEGAKdeb5ET3rQdAAAAAElFTkSuQmCC)}.xdsoft_datetimepicker .xdsoft_label i{opacity:.5;background-position:-92px -19px;display:inline-block;width:9px;height:20px;vertical-align:middle}.xdsoft_datetimepicker .xdsoft_prev{float:left;background-position:-20px 0}.xdsoft_datetimepicker .xdsoft_today_button{float:left;background-position:-70px 0;margin-left:5px}.xdsoft_datetimepicker .xdsoft_next{float:right;background-position:0 0}.xdsoft_datetimepicker .xdsoft_next,.xdsoft_datetimepicker .xdsoft_prev,.xdsoft_datetimepicker .xdsoft_today_button{background-color:transparent;background-repeat:no-repeat;border:0 none;cursor:pointer;display:block;height:30px;opacity:.5;-ms-filter:"alpha(opacity=50)";outline:medium none;overflow:hidden;padding:0;position:relative;text-indent:100%;white-space:nowrap;width:20px;min-width:0}.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev,.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_next{float:none;background-position:-40px -15px;height:15px;width:30px;display:block;margin-left:14px;margin-top:7px}.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker .xdsoft_prev,.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker .xdsoft_next{float:none;margin-left:0;margin-right:14px}.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev{background-position:-40px 0;margin-bottom:7px;margin-top:0}.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box{height:151px;overflow:hidden;border-bottom:1px solid #ddd}.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box>div>div{background:#f5f5f5;border-top:1px solid #ddd;color:#666;font-size:12px;text-align:center;border-collapse:collapse;cursor:pointer;border-bottom-width:0;height:25px;line-height:25px}.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box>div>div:first-child{border-top-width:0}.xdsoft_datetimepicker .xdsoft_today_button:hover,.xdsoft_datetimepicker .xdsoft_next:hover,.xdsoft_datetimepicker .xdsoft_prev:hover{opacity:1;-ms-filter:"alpha(opacity=100)"}.xdsoft_datetimepicker .xdsoft_label{display:inline;position:relative;z-index:9999;margin:0;padding:5px 3px;font-size:14px;line-height:20px;font-weight:bold;background-color:#fff;float:left;width:182px;text-align:center;cursor:pointer}.xdsoft_datetimepicker .xdsoft_label:hover>span{text-decoration:underline}.xdsoft_datetimepicker .xdsoft_label:hover i{opacity:1.0}.xdsoft_datetimepicker .xdsoft_label>.xdsoft_select{border:1px solid #ccc;position:absolute;right:0;top:30px;z-index:101;display:none;background:#fff;max-height:160px;overflow-y:hidden}.xdsoft_datetimepicker .xdsoft_label>.xdsoft_select.xdsoft_monthselect{right:-7px}.xdsoft_datetimepicker .xdsoft_label>.xdsoft_select.xdsoft_yearselect{right:2px}.xdsoft_datetimepicker .xdsoft_label>.xdsoft_select>div>.xdsoft_option:hover{color:#fff;background:#ff8000}.xdsoft_datetimepicker .xdsoft_label>.xdsoft_select>div>.xdsoft_option{padding:2px 10px 2px 5px;text-decoration:none !important}.xdsoft_datetimepicker .xdsoft_label>.xdsoft_select>div>.xdsoft_option.xdsoft_current{background:#3af;-webkit-box-shadow:#178fe5 0 1px 3px 0 inset;box-shadow:#178fe5 0 1px 3px 0 inset;color:#fff;font-weight:700}.xdsoft_datetimepicker .xdsoft_month{width:100px;text-align:right}.xdsoft_datetimepicker .xdsoft_calendar{clear:both}.xdsoft_datetimepicker .xdsoft_year{width:48px;margin-left:5px}.xdsoft_datetimepicker .xdsoft_calendar table{border-collapse:collapse;width:100%}.xdsoft_datetimepicker .xdsoft_calendar td>div{padding-right:5px}.xdsoft_datetimepicker .xdsoft_calendar th{height:25px}.xdsoft_datetimepicker .xdsoft_calendar td,.xdsoft_datetimepicker .xdsoft_calendar th{width:14.2857142%;background:#f5f5f5;border:1px solid #ddd;color:#666;font-size:12px;text-align:right;vertical-align:middle;padding:0;border-collapse:collapse;cursor:pointer;height:25px}.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar td,.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar th{width:12.5%}.xdsoft_datetimepicker .xdsoft_calendar th{background:#f1f1f1}.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_today{color:#3af}.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_highlighted_default{background:#ffe9d2;-webkit-box-shadow:#ffb871 0 1px 4px 0 inset;box-shadow:#ffb871 0 1px 4px 0 inset;color:#000}.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_highlighted_mint{background:#c1ffc9;-webkit-box-shadow:#00dd1c 0 1px 4px 0 inset;box-shadow:#00dd1c 0 1px 4px 0 inset;color:#000}.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_default,.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current,.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box>div>div.xdsoft_current{background:#3af;-webkit-box-shadow:#178fe5 0 1px 3px 0 inset;box-shadow:#178fe5 0 1px 3px 0 inset;color:#fff;font-weight:700}.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month,.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled,.xdsoft_datetimepicker .xdsoft_time_box>div>div.xdsoft_disabled{opacity:.5;-ms-filter:"alpha(opacity=50)";cursor:default}.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month.xdsoft_disabled{opacity:.2;-ms-filter:"alpha(opacity=20)"}.xdsoft_datetimepicker .xdsoft_calendar td:hover,.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box>div>div:hover{color:#fff !important;background:#ff8000 !important;-webkit-box-shadow:none !important;box-shadow:none !important}.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current.xdsoft_disabled:hover,.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box>div>div.xdsoft_current.xdsoft_disabled:hover{background:#3af !important;-webkit-box-shadow:#178fe5 0 1px 3px 0 inset !important;box-shadow:#178fe5 0 1px 3px 0 inset !important;color:#fff !important}.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled:hover,.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box>div>div.xdsoft_disabled:hover{color:inherit !important;background:inherit !important;-webkit-box-shadow:inherit !important;box-shadow:inherit !important}.xdsoft_datetimepicker .xdsoft_calendar th{font-weight:700;text-align:center;color:#999;cursor:default}.xdsoft_datetimepicker .xdsoft_copyright{color:#ccc !important;font-size:10px;clear:both;float:none;margin-left:8px}.xdsoft_datetimepicker .xdsoft_copyright a{color:#eee !important}.xdsoft_datetimepicker .xdsoft_copyright a:hover{color:#aaa !important}.xdsoft_time_box{position:relative;border:1px solid #ccc}.xdsoft_scrollbar>.xdsoft_scroller{background:#ccc !important;height:20px;border-radius:3px}.xdsoft_scrollbar{position:absolute;width:7px;right:0;top:0;bottom:0;cursor:pointer}.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_scrollbar{left:0;right:auto}.xdsoft_scroller_box{position:relative}.xdsoft_datetimepicker.xdsoft_dark{-webkit-box-shadow:0 5px 15px -5px rgba(255,255,255,0.506);box-shadow:0 5px 15px -5px rgba(255,255,255,0.506);background:#000;border-bottom:1px solid #444;border-left:1px solid #333;border-right:1px solid #333;border-top:1px solid #333;color:#ccc}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box{border-bottom:1px solid #222}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box>div>div{background:#0a0a0a;border-top:1px solid #222;color:#999}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label{background-color:#000}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label>.xdsoft_select{border:1px solid #333;background:#000}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label>.xdsoft_select>div>.xdsoft_option:hover{color:#000;background:#007fff}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label>.xdsoft_select>div>.xdsoft_option.xdsoft_current{background:#c50;-webkit-box-shadow:#b03e00 0 1px 3px 0 inset;box-shadow:#b03e00 0 1px 3px 0 inset;color:#000}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label i,.xdsoft_datetimepicker.xdsoft_dark .xdsoft_prev,.xdsoft_datetimepicker.xdsoft_dark .xdsoft_next,.xdsoft_datetimepicker.xdsoft_dark .xdsoft_today_button{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUExQUUzOTA0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUExQUUzOTE0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQTFBRTM4RTQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQTFBRTM4RjQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pp0VxGEAAAIASURBVHja7JrNSgMxEMebtgh+3MSLr1T1Xn2CHoSKB08+QmR8Bx9A8e7RixdB9CKCoNdexIugxFlJa7rNZneTbLIpM/CnNLsdMvNjM8l0mRCiQ9Ye61IKCAgZAUnH+mU3MMZaHYChBnJUDzWOFZdVfc5+ZFLbrWDeXPwbxIqrLLfaeS0hEBVGIRQCEiZoHQwtlGSByCCdYBl8g8egTTAWoKQMRBRBcZxYlhzhKegqMOageErsCHVkk3hXIFooDgHB1KkHIHVgzKB4ADJQ/A1jAFmAYhkQqA5TOBtocrKrgXwQA8gcFIuAIO8sQSA7hidvPwaQGZSaAYHOUWJABhWWw2EMIH9QagQERU4SArJXo0ZZL18uvaxejXt/Em8xjVBXmvFr1KVm/AJ10tRe2XnraNqaJvKE3KHuUbfK1E+VHB0q40/y3sdQSxY4FHWeKJCunP8UyDdqJZenT3ntVV5jIYCAh20vT7ioP8tpf6E2lfEMwERe+whV1MHjwZB7PBiCxcGQWwKZKD62lfGNnP/1poFAA60T7rF1UgcKd2id3KDeUS+oLWV8DfWAepOfq00CgQabi9zjcgJVYVD7PVzQUAUGAQkbNJTBICDhgwYTjDYD6XeW08ZKh+A4pYkzenOxXUbvZcWz7E8ykRMnIHGX1XPl+1m2vPYpL+2qdb8CDAARlKFEz/ZVkAAAAABJRU5ErkJggg==)}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td,.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th{background:#0a0a0a;border:1px solid #222;color:#999}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th{background:#0e0e0e}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_today{color:#c50}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_highlighted_default{background:#ffe9d2;-webkit-box-shadow:#ffb871 0 1px 4px 0 inset;box-shadow:#ffb871 0 1px 4px 0 inset;color:#000}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_highlighted_mint{background:#c1ffc9;-webkit-box-shadow:#00dd1c 0 1px 4px 0 inset;box-shadow:#00dd1c 0 1px 4px 0 inset;color:#000}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_default,.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_current,.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box>div>div.xdsoft_current{background:#c50;-webkit-box-shadow:#b03e00 0 1px 3px 0 inset;box-shadow:#b03e00 0 1px 3px 0 inset;color:#000}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td:hover,.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box>div>div:hover{color:#000 !important;background:#007fff !important}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th{color:#666}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright{color:#333 !important}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a{color:#111 !important}.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a:hover{color:#555 !important}.xdsoft_dark .xdsoft_time_box{border:1px solid #333}.xdsoft_dark .xdsoft_scrollbar>.xdsoft_scroller{background:#333 !important}.xdsoft_datetimepicker .xdsoft_save_selected{display:block;border:1px solid #ddd !important;margin-top:5px;width:100%;color:#454551;font-size:13px}.xdsoft_datetimepicker .blue-gradient-button{font-family:"museo-sans","Book Antiqua",sans-serif;font-size:12px;font-weight:300;color:#82878c;height:28px;position:relative;padding:4px 17px 4px 33px;border:1px solid #d7d8da;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #fff),color-stop(73%, #f4f8fa));background:linear-gradient(to bottom,#fff 0,#f4f8fa 73%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff',endColorstr='#f4f8fa',GradientType=0)}.xdsoft_datetimepicker .blue-gradient-button:hover,.xdsoft_datetimepicker .blue-gradient-button:focus,.xdsoft_datetimepicker .blue-gradient-button:hover span,.xdsoft_datetimepicker .blue-gradient-button:focus span{color:#454551;background:-webkit-gradient(linear,left top, left bottom,color-stop(0, #f4f8fa),color-stop(73%, #FFF));background:linear-gradient(to bottom,#f4f8fa 0,#FFF 73%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f4f8fa',endColorstr='#FFF',GradientType=0)}

@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.date-time-picker__content {
  position: relative;
}
.date-time-picker__field {
  padding-right: 2.6666666667rem;
  overflow: hidden;
  text-overflow: ellipsis;
}
.date-time-picker__icon {
  fill: #d0d0d0;
  width: 1.3333333333rem;
  height: 1.3333333333rem;
  position: absolute;
  bottom: 0.9333333333rem;
  right: 0.8rem;
}
.date-time-picker--with-icon .input {
  padding-right: 2.6666666667rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.icon-tooltip {
  display: inline-block;
  position: relative;
}
.icon-tooltip__tooltip {
  background: rgba(111, 111, 111, 0.8);
  color: #fff;
  text-transform: uppercase;
  font: 500 0.6666666667rem "Lato", sans-serif;
  white-space: nowrap;
  padding: 0.4666666667rem 0.9333333333rem;
  border-radius: 10px;
  position: absolute;
  left: 50%;
  bottom: calc(100% + 0.6666666667rem);
  -webkit-transform-origin: bottom center;
          transform-origin: bottom center;
  -webkit-transform: translateX(-50%) scale(0);
          transform: translateX(-50%) scale(0);
  -webkit-transition: -webkit-transform 250ms ease-in-out;
  transition: -webkit-transform 250ms ease-in-out;
  transition: transform 250ms ease-in-out;
  transition: transform 250ms ease-in-out, -webkit-transform 250ms ease-in-out;
}
.icon-tooltip__tooltip::before {
  content: "";
  border-top: solid 0.2rem rgba(111, 111, 111, 0.8);
  border-left: solid 0.2rem rgba(255, 255, 255, 0);
  border-right: solid 0.2rem rgba(255, 255, 255, 0);
  position: absolute;
  top: 100%;
  left: calc(50% - 0.2rem);
}
.icon-tooltip:hover .icon-tooltip__tooltip {
  -webkit-transform: translateX(-50%) scale(1);
          transform: translateX(-50%) scale(1);
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.navigation-footer-item {
  border-top: solid 1px #d0d0d0;
  color: #fff;
}
@media only screen and (min-width: 550px) {
  .navigation-footer-item {
    padding: 1rem 0 0.6666666667rem 1rem;
  }
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) and (min-width: 768px) {
  .navigation-footer-item {
    padding: 1rem 0 0.6666666667rem;
  }
}
@media only screen and (min-width: 768px) {
  .navigation-footer-item {
    border-top: none;
    -ms-flex-preferred-size: 25%;
        flex-basis: 25%;
  }
}
.navigation-footer-item--social {
  border-top: none;
}
@media only screen and (min-width: 768px) {
  .navigation-footer-item--is-career {
    padding-top: 0.25rem;
  }
}
@media only screen and (min-width: 768px) {
  .navigation-footer-item--is-career .title {
    line-height: 1.1;
    padding-bottom: 0.5rem;
  }
}
.navigation-footer-item--brand {
  border: none;
}
@media only screen and (min-width: 768px) {
  .navigation-footer-item--brand {
    padding-top: 0;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
@media only screen and (min-width: 550px) {
  .navigation-sidebar {
    margin-right: 1rem;
  }
}
.navigation-sidebar--account {
  border: 0;
  padding: 0;
  margin: 0;
}
.navigation-sidebar__list {
  list-style: none;
  padding: 1rem;
  border-radius: 0.1333333333rem;
}
.navigation-sidebar__list--account {
  padding: 0;
  border-radius: 0;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.navigation-sidebar-item {
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #ececec;
}
.navigation-sidebar-item:last-child {
  border-width: 0;
}
.navigation-sidebar-item__link {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  padding: 0.63rem 0;
  line-height: 1.3em;
}
.navigation-sidebar-item__link--account {
  margin: 0 -1.3333333333rem;
  padding: 0 0 0 1.2666666667rem;
  color: #6f6f6f;
}
.navigation-sidebar-item__link--active {
  font-weight: 700;
}
.navigation-sidebar-item__icon-wrapper {
  padding: 0 1rem 0 0;
  min-width: 3.3333333333rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
}
.navigation-sidebar-item__icon-wrapper--account {
  min-width: 3rem;
  color: #d0d0d0;
}
.navigation-sidebar-item__label {
  text-transform: uppercase;
}
.navigation-sidebar-item__label--account {
  padding: 1rem 0.8666666667rem 1rem 0.6666666667rem;
  border-bottom: 0.0666666667rem solid #ececec;
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.node-animator__image {
  position: absolute;
  z-index: 500;
  pointer-events: none;
  overflow: hidden;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.price-mode {
  color: #d0d0d0;
  letter-spacing: 0.0133333333rem;
}
.price-mode--small {
  font-size: 0.8rem;
  letter-spacing: 0.0066666667rem;
}
.price-mode--secondary {
  color: #929292;
}
.price-mode--mobile-small {
  font-size: 0.9333333333rem;
}
@media only screen and (min-width: 768px) {
  .price-mode--mobile-small {
    font-size: 1.0666666667rem;
  }
}
.price-mode__icon {
  margin-right: 0.5333333333rem;
}
.price-mode__icon--small {
  margin-right: 0.2666666667rem;
}
.price-mode__icon--mobile-small {
  margin-right: 0.2666666667rem;
}
@media only screen and (min-width: 768px) {
  .price-mode__icon--mobile-small {
    margin-right: 0.5333333333rem;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-card-item {
  border: 0.1333333333rem solid #1a171b;
  border-radius: 10px;
  padding: 0.8rem;
  margin-bottom: 0.6666666667rem;
  position: relative;
  width: 100%;
}
@media only screen and (min-width: 550px) {
  .product-card-item {
    padding-right: 1.4666666667rem;
  }
}
@media only screen and (min-width: 768px) {
  .product-card-item {
    padding: 0;
    margin-bottom: 1.3333333333rem;
  }
}
.product-card-item__col--image {
  border-radius: 10px 0 0 10px;
  padding-top: 0;
  padding-bottom: 0;
  width: 5.2rem;
  min-width: 5.2rem;
}
@media only screen and (min-width: 550px) {
  .product-card-item__col--image {
    width: 22%;
    min-width: 22%;
  }
}
.product-card-item__col--total {
  padding-top: 0;
  padding-bottom: 0;
  width: 100%;
  min-width: 100%;
}
@media only screen and (min-width: 768px) {
  .product-card-item__col--total {
    width: 40%;
    min-width: 40%;
    text-align: right;
  }
}
@media only screen and (min-width: 768px) {
  .product-card-item .product-card-item__col--total {
    padding-left: 0;
    padding-right: calc(30px + 15px);
  }
}
.product-card-item__col--content {
  width: 100%;
  min-width: 100%;
}
@media only screen and (min-width: 768px) {
  .product-card-item__col--content {
    width: 60%;
    min-width: 60%;
  }
}
.product-card-item__col--description {
  padding-top: 0.5333333333rem;
  padding-bottom: 0.8rem;
  width: calc(100% - 5.2rem);
  min-width: calc(100% - 5.2rem);
}
@media only screen and (min-width: 550px) {
  .product-card-item__col--description {
    width: 78%;
    min-width: 78%;
  }
}
@media only screen and (min-width: 768px) {
  .product-card-item__col--description {
    padding-top: 2.4rem;
    padding-bottom: 1.8666666667rem;
  }
}
.product-card-item__col--shopping-list:not(.product-card-item__col--image) {
  padding-bottom: 1.3333333333rem;
  padding-top: 0;
}
@media only screen and (min-width: 768px) {
  .product-card-item__col--shopping-list:not(.product-card-item__col--image) {
    padding-bottom: 1.8666666667rem;
    padding-top: 1.8666666667rem;
  }
}
.product-card-item__col--shopping-list:not(.product-card-item__col--image):last-child {
  padding-bottom: 0;
}
@media only screen and (min-width: 768px) {
  .product-card-item__col--shopping-list:not(.product-card-item__col--image):last-child {
    padding-bottom: 1.3333333333rem;
  }
}
.product-card-item__col--hidden:not(.product-card-item__col--content) {
  opacity: 0.5;
}
.product-card-item__additional-title {
  padding-top: 1.0666666667rem;
  font-size: 0.9333333333rem;
  font-weight: 700;
  line-height: normal;
}
@media only screen and (min-width: 768px) {
  .product-card-item__additional-title {
    padding-top: 1.8666666667rem;
  }
}
.product-card-item__inner--full-height {
  height: 100%;
}
.product-card-item__inner--total {
  -webkit-box-orient: vertical;
  -webkit-box-direction: reverse;
      -ms-flex-direction: column-reverse;
          flex-direction: column-reverse;
}
@media only screen and (min-width: 768px) {
  .product-card-item__inner--total {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    -webkit-box-align: end;
        -ms-flex-align: end;
            align-items: flex-end;
  }
}
.product-card-item__inner--actions {
  padding-bottom: 0.4rem;
}
@media only screen and (min-width: 768px) {
  .product-card-item__inner--actions {
    padding-bottom: 0;
    -webkit-box-align: end;
        -ms-flex-align: end;
            align-items: flex-end;
  }
}
.product-card-item__title {
  font-size: 0.9333333333rem;
  font-weight: 500;
  line-height: normal;
  color: #6f6f6f;
  margin-bottom: 0;
}
@media only screen and (min-width: 768px) {
  .product-card-item__title {
    font-size: 1.3333333333rem;
  }
}
.product-card-item__title--shopping-list-alternative {
  font-size: 0.8rem;
}
@media only screen and (min-width: 768px) {
  .product-card-item__title--shopping-list-alternative {
    font-size: 1.0666666667rem;
  }
}
.product-card-item__title--hidden {
  opacity: 0.5;
}
.product-card-item__color {
  display: inline-block;
  width: 0.9333333333rem;
  height: 0.9333333333rem;
  border-radius: 50%;
  margin-left: 0.2666666667rem;
  text-indent: -666.6rem;
  vertical-align: middle;
}
.product-card-item__color-preview {
  display: inline-block;
  position: relative;
  font-size: 0.8666666667rem;
  font-weight: 500;
  color: #6f6f6f;
  padding-right: 1.4rem;
  line-height: 1.4rem;
}
@media only screen and (min-width: 768px) {
  .product-card-item__color-preview {
    font-size: 0.9333333333rem;
  }
}
.product-card-item__color-preview-decoration {
  position: absolute;
  right: 0;
  top: 0.2rem;
  width: 1rem;
  height: 1rem;
  border-radius: 50%;
  border: 0.0666666667rem solid #ececec;
}
.product-card-item__available {
  display: inline-block;
  color: #fecc00;
  font-weight: 500;
  line-height: normal;
  margin-bottom: 0.5333333333rem;
}
.product-card-item__checkbox {
  height: 100%;
}
.product-card-item__checkbox-col {
  background-color: rgba(26, 23, 27, 0.05);
  padding-left: 0.8rem;
}
.product-card-item__checkbox-col--shopping-list {
  position: absolute;
  right: 0;
  top: 0;
  background: rgba(255, 255, 255, 0);
}
@media only screen and (min-width: 768px) {
  .product-card-item__checkbox-col--shopping-list {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    position: static;
    background-color: rgba(26, 23, 27, 0.05);
    padding-bottom: 1.3333333333rem;
  }
}
.product-card-item__quantity-holder {
  padding-bottom: 1.0666666667rem;
}
@media only screen and (min-width: 768px) {
  .product-card-item__quantity-holder {
    padding-bottom: 0;
  }
}
.product-card-item__quantity {
  font-size: 0.8666666667rem;
  color: #929292;
}
@media only screen and (min-width: 768px) {
  .product-card-item__quantity {
    font-size: 0.9333333333rem;
  }
}
.product-card-item__quantity-title {
  color: #6f6f6f;
  font-weight: 500;
}
.product-card-item__delete-cart {
  position: absolute;
  bottom: 3.2rem;
  right: 2.1333333333rem;
}
@media only screen and (min-width: 768px) {
  .product-card-item__delete-cart {
    padding-top: 2.1333333333rem;
    position: static;
  }
}
.product-card-item__remove-button {
  margin-top: -3.2rem;
}
@media only screen and (min-width: 768px) {
  .product-card-item__remove-button {
    margin: 0;
  }
}
.product-card-item__remove-button-text {
  display: none;
}
@media only screen and (min-width: 768px) {
  .product-card-item__remove-button-text {
    display: inline-block;
  }
}
.product-card-item__dropdown {
  position: absolute;
  left: -0.1333333333rem;
  width: calc(100% + 0.2666666667rem);
  top: calc(100% + 1rem);
}
@media only screen and (min-width: 768px) {
  .product-card-item__dropdown {
    position: static;
    width: 100%;
    left: auto;
    top: auto;
  }
}
.product-card-item__dropdown .select2-selection__rendered,
.product-card-item__dropdown .custom-select__select {
  background-color: #fff;
}
@media only screen and (min-width: 768px) {
  .product-card-item__dropdown .select2-selection__rendered,
  .product-card-item__dropdown .custom-select__select {
    background-color: #1a171b;
  }
}
.product-card-item--shopping-list-available {
  padding-bottom: 5rem;
}
@media only screen and (min-width: 768px) {
  .product-card-item--shopping-list-available {
    padding-bottom: 0;
  }
}
.product-card-item--checkout {
  margin-bottom: 1rem;
}
@media only screen and (min-width: 768px) {
  .product-card-item--checkout .product-card-item__col--image {
    width: 17%;
    min-width: 17%;
  }
}
@media only screen and (min-width: 768px) {
  .product-card-item--checkout .product-card-item__col--total {
    width: 20%;
    min-width: 20%;
  }
}
@media only screen and (min-width: 768px) {
  .product-card-item .product-card-item--checkout .product-card-item__col--total {
    padding-left: 0;
    padding-right: 30px;
  }
}
@media only screen and (min-width: 768px) {
  .product-card-item--checkout .product-card-item__col--content {
    width: 80%;
    min-width: 80%;
  }
}
.product-card-item--checkout .product-card-item__col--description {
  padding-top: 0;
  padding-bottom: 0;
}
@media only screen and (min-width: 768px) {
  .product-card-item--checkout .product-card-item__col--description {
    width: 83%;
    min-width: 83%;
    padding-top: 1.3333333333rem;
    padding-bottom: 1rem;
    margin-left: -0.6666666667rem;
  }
}
.product-card-item--checkout-address {
  margin-bottom: 6.6666666667rem;
}
@media only screen and (min-width: 768px) {
  .product-card-item--checkout-address {
    margin-bottom: 1.3333333333rem;
  }
}
@media only screen and (min-width: 768px) {
  .product-card-item--checkout-address .product-card-item__col--total {
    width: 60%;
    min-width: 60%;
    text-align: left;
  }
}
.product-card-item--checkout-address .product-card-item__col--total .product-card-item__inner {
  -webkit-box-align: start;
      -ms-flex-align: start;
          align-items: flex-start;
  height: auto;
}
@media only screen and (min-width: 768px) {
  .product-card-item--checkout-address .product-card-item__col--content {
    width: 40%;
    min-width: 40%;
  }
}
.product-card-item--order-detail .product-card-item__col--image {
  margin-left: 2.3333333333rem;
  padding-right: 0.3333333333rem;
}
@media only screen and (min-width: 550px) {
  .product-card-item--order-detail .product-card-item__col--image {
    margin-left: 0;
    padding-right: 15px;
  }
}
@media only screen and (min-width: 768px) {
  .product-card-item--order-detail .product-card-item__col--total {
    width: 30%;
    min-width: 30%;
  }
}
@media only screen and (min-width: 768px) {
  .product-card-item .product-card-item--order-detail .product-card-item__col--total {
    padding-left: 0;
    padding-right: 30px;
  }
}
@media only screen and (min-width: 768px) {
  .product-card-item--order-detail .product-card-item__col--content {
    width: 70%;
    min-width: 70%;
  }
}
.product-card-item--order-detail .product-card-item__col--description {
  width: calc(100% - 5.2rem - 2.3333333333rem);
  min-width: calc(100% - 5.2rem - 2.3333333333rem);
  padding-top: 0;
  padding-bottom: 0;
}
@media only screen and (min-width: 550px) {
  .product-card-item--order-detail .product-card-item__col--description {
    width: 78%;
    min-width: 78%;
  }
}
@media only screen and (min-width: 768px) {
  .product-card-item--order-detail .product-card-item__col--description {
    padding-top: 1.3333333333rem;
    padding-bottom: 1rem;
    margin-left: -0.6666666667rem;
  }
}
.product-card-item--fixed-input {
  max-width: 9.2rem;
  margin-bottom: 2rem;
  text-align: right;
}
.product-card-item--shopping-list-alternative {
  margin-bottom: 0.6666666667rem;
}
.product-card-item--shopping-list-alternative .product-card-item__col {
  width: 69%;
  min-width: 69%;
}
@media only screen and (min-width: 768px) {
  .product-card-item--shopping-list-alternative .product-card-item__col {
    width: 78%;
    min-width: 78%;
  }
}
.product-card-item--shopping-list-alternative .product-card-item__col--image {
  width: 31%;
  min-width: 31%;
}
@media only screen and (min-width: 768px) {
  .product-card-item--shopping-list-alternative .product-card-item__col--image {
    width: 22%;
    min-width: 22%;
  }
}
.product-card-item--shopping-list-alternative .product-card-item__col--content {
  width: 100%;
  min-width: 100%;
}
@media only screen and (min-width: 768px) {
  .product-card-item--shopping-list-alternative .product-card-item__col--content {
    width: 58%;
    min-width: 58%;
  }
}
.product-card-item--shopping-list-alternative .product-card-item__col--total {
  width: 100%;
  min-width: 100%;
}
@media only screen and (min-width: 768px) {
  .product-card-item--shopping-list-alternative .product-card-item__col--total {
    width: 42%;
    min-width: 42%;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-item-variant-selector__label {
  font-size: 0.8666666667rem;
  font-weight: 500;
  line-height: normal;
  color: #6f6f6f;
  margin-right: 0.4rem;
}
@media only screen and (min-width: 768px) {
  .product-item-variant-selector__label {
    margin-right: 1.6rem;
    font-size: 0.9333333333rem;
  }
}
@media only screen and (min-width: 550px) {
  .product-item-variant-selector__select {
    -webkit-box-flex: 0;
        -ms-flex-positive: 0;
            flex-grow: 0;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.table-action-link {
  width: 100%;
  padding: 0.2666666667rem 1rem;
  text-align: center;
}
@media only screen and (min-width: 768px) {
  .table-action-link {
    padding: 0;
    line-height: normal;
    border: none;
    margin-right: 9px;
  }
}
.table-action-link .icon svg {
  width: 2.3333333333rem;
  height: 2.3333333333rem;
}
@media only screen and (min-width: 768px) {
  .table-action-link .icon svg {
    width: 1.6666666667rem;
    height: 1.6666666667rem;
  }
}
.table-action-link--tight {
  padding-left: 0.2rem;
  padding-right: 0.2rem;
  font-weight: 500;
}
@media only screen and (min-width: 768px) {
  .table-action-link--tight {
    padding: 0;
  }
}
.table-action-link--hide-title .table-action-link__title {
  display: none;
}
.table-action-link--full-height {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  height: 100%;
}
.table-action-link__title {
  display: block;
  padding-top: 0.2rem;
  font-size: 0.7333333333rem;
  line-height: 0.8666666667rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.table-action-link {
  width: 100%;
  padding: 0.2666666667rem 1rem;
  border: 0.0666666667rem solid #d0d0d0;
  border-radius: 10px;
  text-align: center;
}
@media only screen and (min-width: 768px) {
  .table-action-link {
    padding: 0;
    line-height: normal;
    border: none;
    margin-right: 9px;
  }
}
.table-action-link--tight {
  padding-left: 0.2rem;
  padding-right: 0.2rem;
  font-weight: 500;
}
@media only screen and (min-width: 768px) {
  .table-action-link--tight {
    padding: 0;
  }
}
.table-action-link--full-height {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  height: 100%;
}
.table-action-link__title {
  display: block;
  padding-top: 0.2rem;
  font-size: 0.7333333333rem;
  line-height: 0.8666666667rem;
}

.table-action-span {
  width: 100%;
  padding: 0.2666666667rem 1rem;
  border: 0.0666666667rem solid #d0d0d0;
  border-radius: 10px;
  text-align: center;
}
@media only screen and (min-width: 768px) {
  .table-action-span {
    padding: 0;
    line-height: normal;
    border: none;
    margin-right: 9px;
  }
}
.table-action-span--tight {
  padding-left: 0.2rem;
  padding-right: 0.2rem;
  font-weight: 500;
}
@media only screen and (min-width: 768px) {
  .table-action-span--tight {
    padding: 0;
  }
}
.table-action-span--full-height {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  height: 100%;
}
.table-action-span__title {
  display: block;
  padding-top: 0.2rem;
  font-size: 0.7333333333rem;
  line-height: 0.8666666667rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.toggler-accordion__icon {
  position: absolute;
  right: 0;
  top: 50%;
  -webkit-transform: translateY(-50%);
          transform: translateY(-50%);
  font-size: 1.3333333333rem;
}
.toggler-accordion__item {
  position: relative;
  cursor: pointer;
  padding-right: 1rem;
}
.toggler-accordion__item.active .toggler-accordion__icon {
  -webkit-transform: translateY(-50%) rotate(180deg);
          transform: translateY(-50%) rotate(180deg);
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.search__navigation {
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
}
.search__navigation .tab-element__nav {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
}
.search__navigation .tab-element__nav-item {
  background-color: #ececec;
  color: #4b4b4d;
  border-top-left-radius: 10px;
  border-top-right-radius: 10px;
  padding: 0.75rem 1rem 0.5rem;
  text-transform: uppercase;
  cursor: pointer;
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.search__navigation .tab-element__nav-item svg {
  fill: #4b4b4d;
}
.search__navigation .tab-element__nav-item:not(:last-child) {
  margin-right: 0.5rem;
}
.search__navigation .tab-element__nav-item .tab-element__link {
  color: #4b4b4d;
}
.search__navigation .tab-element__nav-item .tab-element__link:hover {
  color: #4b4b4d;
}
.search__navigation .tab-element__nav-item.active {
  background-color: #4b4b4d;
  color: #fff;
  color: #fff;
}
.search__navigation .tab-element__nav-item.active svg {
  fill: #fff;
}
.search__navigation .tab-element__nav-item.active .tab-element__link {
  color: #fff;
}
.search__navigation .tab-element__nav-item.active .tab-element__link:hover {
  color: #fff;
}
.search__navigation .tab-element__content {
  display: inline-block;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
* {
  -ms-flex-negative: 1;
      flex-shrink: 1;
}

.page-layout {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  height: 100%;
}
.page-layout .content-wrap {
  -webkit-box-flex: 0;
      -ms-flex: none;
          flex: none;
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .page-layout .content-wrap {
    /* stylelint-disable declaration-no-important */
    -ms-flex-negative: 0 !important;
        flex-shrink: 0 !important;
    -ms-flex-preferred-size: auto !important;
        flex-basis: auto !important;
    /* stylelint-enable declaration-no-important */
  }
}

.page-layout-main--catalog-page, .page-layout-main--cms-search-page {
  position: relative;
  padding-top: 1.0666666667rem;
}
@media only screen and (min-width: 768px) {
  .page-layout-main--catalog-page, .page-layout-main--cms-search-page {
    padding-top: 1.3333333333rem;
  }
}
.page-layout-main--catalog-page-content .product-list {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  margin: 0 -0.5rem;
}
@media only screen and (min-width: 768px) {
  .page-layout-main--pdp {
    padding: 30px 0 0;
  }
}
.page-layout-main--quick-order-page {
  padding: 0.9333333333rem 0 4rem;
}
@media only screen and (min-width: 768px) {
  .page-layout-main--quick-order-page {
    padding: 3.3333333333rem 0 3.6rem;
  }
}
.page-layout-main--cart-page {
  padding-top: 0.9333333333rem;
  padding-bottom: 2rem;
}
@media only screen and (min-width: 768px) {
  .page-layout-main--cart-page {
    padding-top: 2.1333333333rem;
    padding-bottom: 4rem;
  }
}
@media only screen and (min-width: 1024px) {
  .page-layout-main--cart-page {
    padding-bottom: 8rem;
  }
}
.page-layout-main--checkout-page {
  padding-top: 1.6rem;
  padding-bottom: 5.3333333333rem;
}
@media only screen and (min-width: 768px) {
  .page-layout-main--checkout-page {
    padding-top: 2.1333333333rem;
  }
}
@media only screen and (min-width: 1024px) {
  .page-layout-main--checkout-page {
    padding-bottom: 8rem;
  }
}
.page-layout-main--cms-page {
  padding-top: 2.1333333333rem;
  padding-bottom: 4.6666666667rem;
}
.page-layout-main--success {
  padding-top: 0;
  padding-bottom: 3.3333333333rem;
}
@media only screen and (min-width: 1024px) {
  .page-layout-main--success {
    padding-bottom: 7.3333333333rem;
  }
}
.page-layout-main--error-page {
  background-color: #000;
  color: #fff;
  display: block;
  background-size: cover;
  padding-bottom: 3rem;
}
.page-layout-main--error-page svg {
  fill: #fff;
}
.page-layout-main--error-page-bright {
  background-color: #fff;
  color: #4b4b4d;
}
.page-layout-main--error-page-bright svg {
  fill: #4b4b4d;
}
.page-layout-main--country-select-page {
  overflow-y: scroll;
}
.page-layout-main--country-select-page .content-wrap {
  margin-top: 2rem;
}
@media only screen and (min-width: 768px) {
  .page-layout-main--country-select-page .content-wrap {
    margin-top: 0;
    padding: 4rem 0;
    background-image: url("/assets/current/default/images/country-selection-bg.jpg");
    background-repeat: no-repeat;
    background-position: center;
    background-size: cover;
  }
}
.page-layout-main__pdp-gallery {
  background: #fff;
  margin: 0;
  width: calc(100% + 30px);
  min-width: 100%;
  position: relative;
}
@media only screen and (min-width: 768px) {
  .page-layout-main__pdp-gallery {
    background: transparent;
    width: calc(660 / 1200 * 100%);
    min-width: calc(660 / 1200 * 100%);
    margin: 0 1rem 0 0;
    padding-bottom: 0;
  }
}
.page-layout-main__pdp-gallery .icon--gallery-close,
.page-layout-main__pdp-gallery .button--gallery-fullscreen {
  position: absolute;
  cursor: pointer;
}
.page-layout-main__pdp-gallery .icon--gallery-close {
  display: none;
  top: 0;
  right: 1.3333333333rem;
  font-size: 2.4rem;
  z-index: 701;
}
.page-layout-main__pdp-gallery .button--gallery-fullscreen {
  top: 0;
  left: 0;
  z-index: 2;
  background: rgba(255, 255, 255, 0.5);
  padding: 3.75px;
  padding: 0.25rem;
  border-radius: 0;
}
@media only screen and (min-width: 1024px) {
  .page-layout-main__pdp-gallery .button--gallery-fullscreen {
    left: auto;
    right: 0;
  }
}
.page-layout-main--dark {
  background-image: linear-gradient(150deg, #4b4b4d, #1a171b);
  color: #fff;
  padding-bottom: 2rem;
}
@media only screen and (max-width: 1199px) {
  .page-layout-main--rimless .container {
    padding: 0;
  }
}
.page-layout-main.image-gallery--fullscreen .page-layout-main__pdp-gallery {
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
  background: #fff;
  z-index: 700;
  padding: 0;
}
@media only screen and (max-width: 1023px) {
  .page-layout-main.image-gallery--fullscreen .page-layout-main__pdp-gallery {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
  }
}
@media only screen and (min-width: 1024px) {
  .page-layout-main.image-gallery--fullscreen .page-layout-main__pdp-gallery {
    padding: 20px;
    padding: 1.3333333333rem;
  }
}
@media only screen and (max-width: 1023px) {
  .page-layout-main.image-gallery--fullscreen .image-gallery {
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .page-layout-main.image-gallery--fullscreen .image-gallery__thumbnail-img--video {
    display: none;
  }
  .page-layout-main.image-gallery--fullscreen .image-gallery__thumbnail-video-player {
    display: block;
  }
}

.is-locked .embeddedServiceHelpButton {
  display: none;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.active-filter {
  -webkit-transition: border-color 250ms ease-in-out, background-color 250ms ease-in-out, -webkit-box-shadow 250ms ease-in-out;
  transition: border-color 250ms ease-in-out, background-color 250ms ease-in-out, -webkit-box-shadow 250ms ease-in-out;
  transition: box-shadow 250ms ease-in-out, border-color 250ms ease-in-out, background-color 250ms ease-in-out;
  transition: box-shadow 250ms ease-in-out, border-color 250ms ease-in-out, background-color 250ms ease-in-out, -webkit-box-shadow 250ms ease-in-out;
  border-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  padding: 0.6666666667rem;
  line-height: 1.1;
  border-radius: 10px;
  color: #4b4b4d;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.active-filter__icon {
  -webkit-transition: color 250ms ease-in-out;
  transition: color 250ms ease-in-out;
  margin-left: 1rem;
  color: #4b4b4d;
}
.active-filter__icon svg {
  width: 0.9333333333rem;
  height: 0.9333333333rem;
}
.active-filter:hover, .active-filter:focus {
  background-color: #ececec;
  color: #4b4b4d;
}
.active-filter:hover svg, .active-filter:focus svg {
  fill: #4b4b4d;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
@media only screen and (max-width: 767px) {
  .ajax-product-list {
    margin-top: 1rem;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.catalog-cms-block > * {
  font: 500 1.2rem/1.5333333333rem "Lato", sans-serif;
}
.catalog-cms-block p {
  font-size: 1rem;
  line-height: 1.4666666667rem;
  font-weight: 400;
  color: #d0d0d0;
  margin-top: 0.6666666667rem;
}
.catalog-cms-block a {
  color: #b2b2b2;
}
.catalog-cms-block a:hover, .catalog-cms-block a:focus {
  color: #fecc00;
}
.catalog-cms-block hr {
  display: none;
}
.catalog-cms-block--sidebar {
  margin-top: 3.2rem;
}
.catalog-cms-block--sidebar p {
  text-shadow: 0 0.1333333333rem 0.2666666667rem rgba(75, 75, 77, 0.2);
}
.catalog-cms-block--filter-sidebar {
  display: none;
}
@media only screen and (min-width: 768px) {
  .catalog-cms-block--filter-sidebar {
    display: block;
  }
}
.catalog-cms-block--bottom {
  text-align: center;
}
.catalog-cms-block--bottom > * {
  font-size: 2.1333333333rem;
  line-height: 2.7333333333rem;
}
.catalog-cms-block--bottom > *:first-child {
  margin-top: 0;
}
.catalog-cms-block--bottom h2 {
  color: #6f6f6f;
  font-size: 1.8666666667rem;
  line-height: 1.2;
  margin-bottom: 1.0666666667rem;
}
@media only screen and (min-width: 768px) {
  .catalog-cms-block--bottom h2 {
    font-size: 2rem;
  }
}
@media only screen and (min-width: 1024px) {
  .catalog-cms-block--bottom h2 {
    font-size: 2.1333333333rem;
    line-height: 2.7333333333rem;
    margin-bottom: 1.6rem;
  }
}
.catalog-cms-block--bottom p {
  font-size: 1rem;
  color: #d0d0d0;
  line-height: 1.61;
  max-width: 64.6666666667rem;
  margin: 0 auto 1.7333333333rem;
}
@media only screen and (min-width: 768px) {
  .catalog-cms-block--bottom p {
    font-size: 1.2rem;
    margin-bottom: 2.6666666667rem;
  }
}
.catalog-cms-block-wrap {
  background-color: #1a171b;
  padding: 2.1333333333rem 0 1.0666666667rem;
}
@media only screen and (min-width: 768px) {
  .catalog-cms-block-wrap {
    padding: 3.3333333333rem 0 2.5333333333rem;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.filter-category__menu-item {
  border-top-width: 2px;
  border-style: solid;
  border-color: #ececec;
}
@media only screen and (min-width: 768px) {
  .filter-category__menu-item {
    border: none;
  }
}
.filter-category__menu-item:first-child {
  border: none;
}
.filter-category__menu-item--lvl-1 {
  margin-bottom: 0.5rem;
}
.filter-category__menu-item--lvl-1 > .filter-category__item-name {
  /* stylelint-disable-next-line max-nesting-depth */
}
.filter-category__menu-item--lvl-1 > .filter-category__item-name .filter-category__menu-link {
  font-size: 1.0666666667rem;
  text-transform: uppercase;
}
.filter-category__menu-item--lvl-1 > .filter-category__item-name:not(:first-child) {
  margin-top: 0.5rem;
}
.filter-category__menu-item--lvl-1 > .filter-category__item-name .filter-category__menu-link, .filter-category__menu-item--active > .filter-category__item-name .filter-category__menu-link {
  font-weight: 700;
}
.filter-category__menu-item--show-branch {
  border-top-width: 2px;
  border-style: solid;
  border-color: #fff;
}
.filter-category__menu-item--show-branch:first-child {
  border: none;
}
@media only screen and (min-width: 768px) {
  .filter-category__menu-item--show-branch {
    border: none;
  }
}
.filter-category__menu-item--lvl-2 {
  padding: 0.5rem 0;
}
.filter-category__menu-item .filter-category__item-name {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  -ms-flex-line-pack: center;
      align-content: center;
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
  min-height: 2rem;
}
@media only screen and (min-width: 768px) {
  .filter-category__menu-item .filter-category__item-name {
    min-height: auto;
  }
}
.filter-category__menu-item--lvl-3 {
  margin-left: 1.5rem;
  padding: 0.25rem 0;
}
.filter-category__menu-item--lvl-3:last-child {
  padding-bottom: 0;
}
.filter-category__menu-item--lvl-4 {
  margin-left: 1.5rem;
  padding: 0.25rem 0;
}
.filter-category__menu-item--lvl-4:last-child {
  padding-bottom: 0;
}
.filter-category__menu-item--lvl-5 {
  margin-left: 1.5rem;
  padding: 0.25rem 0;
}
.filter-category__menu-item--lvl-5:last-child {
  padding-bottom: 0;
}
.filter-category__menu-item--lvl-6 {
  margin-left: 1.5rem;
  padding: 0.25rem 0;
}
.filter-category__menu-item--lvl-6:last-child {
  padding-bottom: 0;
}
.filter-category__menu-link {
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  color: #4b4b4d;
  cursor: pointer;
  padding: 0;
}
@media only screen and (max-width: 768px) {
  .filter-category__menu-link {
    -ms-flex-item-align: center;
        align-self: center;
  }
}
.filter-category__menu-link .button__icon-right {
  margin-left: auto;
}
.filter-category__menu-link[disabled], .filter-category__menu-link[disabled].button--disabled {
  color: #6f6f6f;
  cursor: default;
  pointer-events: none;
}
.filter-category__link-text {
  text-align: left;
}
.filter-category__link-text--active {
  text-decoration: underline;
}
.filter-category__toggler--show-pointer {
  cursor: pointer;
}
.filter-category__toggler svg {
  width: 0.9333333333rem;
  height: 0.9333333333rem;
}
@media only screen and (max-width: 768px) {
  .filter-category__toggler {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    width: 2rem;
    height: 2rem;
  }
}
.filter-category__toggler-icon--close {
  display: none;
}
.filter-category__toggler.active .filter-category__toggler-icon--close {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
.filter-category__toggler.active .filter-category__toggler-icon--open {
  display: none;
}
.filter-category__toggler--right {
  justify-self: flex-end;
  margin-left: auto;
}
.filter-category__list-icon {
  font-size: 0.8rem;
  line-height: 1.5;
  margin-right: 0;
  min-width: 1.6666666667rem;
  position: relative;
  width: 1.6666666667rem;
  height: 1.2rem;
}
.filter-category__list-icon svg {
  width: 0.8rem;
  height: 0.8rem;
}
@media only screen and (max-width: 768px) {
  .filter-category__list-icon {
    -ms-flex-item-align: center;
        align-self: center;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.filter-enumeration {
  margin-bottom: -0.5rem;
}
@media only screen and (min-width: 768px) {
  .filter-enumeration {
    padding: 0;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.filter-range__inputs {
  margin-top: 1.3333333333rem;
  font-weight: 500;
  color: #929292;
}
.filter-range__input-wrap {
  position: relative;
}
.filter-range__input-wrap .input--filter-range {
  padding-right: 0.25rem;
}
.filter-range__unit {
  position: absolute;
  right: 1rem;
  top: 0.0333333333rem;
  bottom: 0.0666666667rem;
  border-radius: 0 10px 10px 0;
  width: 1.3333333333rem;
  text-align: center;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  font-size: 0.8rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.filter-rating {
  font-size: 0.9333333333rem;
  padding-left: 0.6666666667rem;
}
@media only screen and (min-width: 768px) {
  .filter-rating {
    padding-left: 0;
  }
}
.filter-rating__text {
  vertical-align: middle;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.outlet-filter-buttons {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
}
.outlet-filter-buttons__button {
  padding: 0.5rem;
  color: #fff;
  margin-right: 1rem;
  margin-bottom: 0.75rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.outlet-filter-buttons__button:hover {
  color: #d0d0d0;
}
.outlet-filter-buttons__button--price-bracket-1-5 {
  background-color: #df060f;
}
.outlet-filter-buttons__button--price-bracket-6-15 {
  background-color: #f17b0d;
}
.outlet-filter-buttons__button--price-bracket-16-30 {
  background-color: #ffcb01;
}
.outlet-filter-buttons__button--price-bracket-31-50 {
  background-color: #245898;
}
.outlet-filter-buttons__button--price-bracket-50-plus {
  background-color: #029345;
}
.outlet-filter-buttons__button--price-bracket-16-30 {
  color: #4b4b4d;
}
.outlet-filter-buttons__button--price-bracket-16-30:hover {
  color: #929292;
}
.outlet-filter-buttons__button .checkbox label,
.outlet-filter-buttons__button .checkbox input {
  pointer-events: none;
}
.outlet-filter-buttons__button .checkbox__box {
  margin-right: 0.5rem;
}
.outlet-filter-buttons__button .checkbox__check::before {
  font-weight: bolder;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.sort-list {
  margin-bottom: 1.0666666667rem;
}
@media only screen and (min-width: 768px) {
  .sort-list {
    margin-bottom: 1.3333333333rem;
  }
}
.sort-list__container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
@media only screen and (min-width: 768px) and (max-width: 1024px) {
  .sort-list__container {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    -webkit-box-align: start;
        -ms-flex-align: start;
            align-items: flex-start;
  }
}
.sort-list__label {
  margin-right: 0.5rem;
}
@media only screen and (min-width: 768px) {
  .sort-list__col:not(:last-child) {
    padding-right: 0.5rem;
  }
}
.sort-list__col--counter {
  padding-right: 0.6666666667rem;
  font-weight: 700;
  font-size: 1.0666666667rem;
}
@media only screen and (min-width: 768px) {
  .sort-list__col--counter {
    padding-bottom: 0.6666666667rem;
  }
}
@media only screen and (min-width: 1024px) {
  .sort-list__col--counter {
    padding-bottom: 0;
  }
}
.sort-list__col--filters {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
@media only screen and (max-width: 767px) {
  .sort-list__col--filters {
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    -webkit-box-align: start;
        -ms-flex-align: start;
            align-items: flex-start;
    width: 100%;
  }
}
@media only screen and (min-width: 1024px) {
  .sort-list__col--filters {
    width: auto;
  }
}
@media only screen and (min-width: 768px) and (max-width: 1024px) {
  .sort-list__col--filters {
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
    width: 100%;
  }
}
.sort-list__col--select {
  padding: 0 0.3333333333rem;
}
@media only screen and (min-width: 768px) {
  .sort-list__col--select {
    padding: 0;
  }
}
.sort-list__col--select:not(:last-child) {
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 768px) {
  .sort-list__col--select:not(:last-child) {
    padding-right: 2rem;
  }
}
.sort-list__filter-grid {
  margin: 0 -0.3333333333rem;
}
@media only screen and (min-width: 768px) {
  .sort-list__filter-grid {
    margin: 0;
  }
}
@media only screen and (max-width: 767px) {
  .sort-list__filter--available {
    -webkit-box-ordinal-group: 3;
        -ms-flex-order: 2;
            order: 2;
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .sort-list__filter--available .toggle-switch {
    margin-top: 1.5rem;
  }
}
.sort-list__sort {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
@media only screen and (max-width: 767px) {
  .sort-list__sort {
    width: 100%;
  }
}
.sort-list .toggle-switch {
  padding-right: 1rem;
}
@media only screen and (min-width: 1024px) {
  .sort-list .toggle-switch {
    padding: 0 3rem;
  }
}
@media only screen and (min-width: 768px) {
  .sort-list .download-filter {
    border-top-width: 1px;
    border-style: solid;
    border-color: #d0d0d0;
    margin-top: 1rem;
  }
  .sort-list .download-filter .checkbox__counter {
    display: none;
  }
}
.sort-list .download-filter .js-filter-section__downloads {
  /* stylelint-disable-next-line declaration-no-important */
  display: block !important;
}
.sort-list .download-filter .menu {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.sort-list .download-filter .menu__item {
  background-color: #ececec;
  color: #4b4b4d;
  padding: 0.5rem;
  /* stylelint-disable-next-line max-nesting-depth */
}
.sort-list .download-filter .menu__item svg {
  fill: #4b4b4d;
}
.sort-list .download-filter .menu__item:not(last-child) {
  margin-right: 0.5rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.suggestion-links-list {
  -ms-flex-preferred-size: 50%;
      flex-basis: 50%;
}
.suggestion-links-list__headline-container {
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #ececec;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  margin-bottom: 0.75rem;
  margin-top: 0;
  padding: 0;
  width: 100%;
}
.suggestion-links-list__headline-container .headline {
  line-height: unset;
  margin-top: 0;
}
.suggestion-links-list__product-counter {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  line-height: unset;
  font-size: 1rem;
  margin-left: 0.25rem;
  margin-bottom: 0.5rem;
}
.suggestion-links-list__title {
  font-size: 2rem;
  font-weight: 400;
  line-height: normal;
  margin: 1.7333333333rem 0 0;
  color: #4b4b4d;
}
.suggestion-links-list__item {
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.2rem;
  letter-spacing: 0.0066666667rem;
  padding: 0;
}
.suggestion-links-list__link {
  color: #4b4b4d;
  font-weight: 700;
}
.suggestion-links-list__link::before {
  content: ">";
  padding-right: 0.25rem;
  color: #4b4b4d;
  line-height: 2;
}
.suggestion-links-list__link--searchhub {
  font-weight: 400;
}
.suggestion-links-list__icon {
  margin-right: 0.5rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.view-mode-switch {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  margin: 0.2rem -0.5333333333rem 0;
}
@media only screen and (min-width: 768px) {
  .view-mode-switch {
    width: 100%;
    border: 1px solid #ececec;
    border-radius: 10px;
    margin: 0;
  }
}
.view-mode-switch__link {
  padding: 0 0.5333333333rem;
  font-size: 0;
  color: #d0d0d0;
}
@media only screen and (min-width: 768px) {
  .view-mode-switch__link {
    -webkit-transition: color 250ms ease-in-out;
    transition: color 250ms ease-in-out;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    width: 50%;
    -ms-flex-negative: 0;
        flex-shrink: 0;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    padding: 0.8rem 1.3333333333rem 0.6666666667rem;
    font-size: 0.9333333333rem;
    line-height: 1.2rem;
  }
  .view-mode-switch__link:not(:first-child) {
    border-left: 1px solid #ececec;
  }
  .view-mode-switch__link:first-child {
    padding-left: 1.4rem;
  }
  .view-mode-switch__link:hover, .view-mode-switch__link:focus {
    color: #929292;
  }
}
.view-mode-switch__link--active {
  color: #929292;
}
@media only screen and (min-width: 768px) {
  .view-mode-switch__link--active {
    background-color: #1a171b;
    font-weight: 700;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.active-filter-section {
  margin-bottom: 0.8rem;
  font-size: 0.9333333333rem;
}
.active-filter-section__item--title {
  display: none;
}
@media only screen and (min-width: 768px) {
  .active-filter-section__item--title {
    display: block;
  }
}
.active-filter-section__item--filters {
  width: 100%;
}
@media only screen and (min-width: 768px) {
  .active-filter-section__item--filters {
    width: auto;
  }
}
.active-filter-section__item,
.active-filter-section .active-filter {
  margin-bottom: 0.6666666667rem;
}
.active-filter-section__item:not(:last-child),
.active-filter-section .active-filter:not(:last-child) {
  margin-right: 0.6666666667rem;
}
.active-filter-section__reset {
  -webkit-transition: color 250ms ease-in-out;
  transition: color 250ms ease-in-out;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
  font-weight: 700;
  color: #929292;
}
@media only screen and (min-width: 768px) {
  .active-filter-section__reset {
    -webkit-box-pack: start;
        -ms-flex-pack: start;
            justify-content: flex-start;
  }
}
.active-filter-section__reset:hover,
.active-filter-section__reset:hover .active-filter-section__reset-icon, .active-filter-section__reset:focus,
.active-filter-section__reset:focus .active-filter-section__reset-icon {
  color: #b2b2b2;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.filter-section {
  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  padding: 0.9333333333rem 1.3333333333rem 4.3666666667rem;
  background: #fff;
  z-index: 401;
}
@media only screen and (min-width: 768px) {
  .filter-section {
    position: static;
    padding: 0;
    background: none;
    margin-bottom: 2rem;
  }
}
.filter-section__close {
  position: absolute;
  right: 1.3333333333rem;
  top: 1.1333333333rem;
  color: #000;
  background: none;
}
.filter-section__title {
  border-bottom-width: 2px;
  border-style: solid;
  border-color: #ececec;
  padding: 0 1.5rem 0.5rem;
  margin-bottom: 1rem;
  font-size: 1.2rem;
  line-height: 1.67;
  text-align: center;
}
.filter-section__sorting {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  padding-bottom: 1.5rem;
}
.filter-section__holder {
  height: calc(100% - 13.75rem);
  border-top: 1px solid #ececec;
  overflow: auto;
}
@media only screen and (min-width: 768px) {
  .filter-section__holder {
    height: auto;
    border: none;
  }
}
.filter-section__item {
  background-color: #ececec;
  color: #4b4b4d;
  color: #4b4b4d;
  padding: 1.2rem 1.3333333333rem;
  margin-bottom: 1.5rem;
}
.filter-section__item svg {
  fill: #4b4b4d;
}
@media only screen and (min-width: 768px) {
  .filter-section__item--hollow {
    background: none;
    padding: 0;
  }
}
.filter-section__item-title {
  color: #4b4b4d;
  font: 700 0.8666666667rem/1.1333333333rem "Lato", sans-serif;
  text-transform: uppercase;
  letter-spacing: 0.0246666667rem;
}
@media only screen and (min-width: 768px) {
  .filter-section__item-title {
    font-size: 0.8rem;
    line-height: 1rem;
  }
}
.filter-section__item-content {
  margin-top: 1.3333333333rem;
}
@media only screen and (min-width: 768px) {
  .filter-section__item-content--hollow {
    margin-top: 0;
  }
}
.filter-section__modify-filters {
  margin-top: -1rem;
  margin-bottom: 0.5rem;
}
.filter-section__filter-action {
  margin-top: 0.5rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.compatible-dimmer {
  margin: 1.5rem 0;
}
.compatible-dimmer__container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  justify-content: space-between;
  padding-top: 1rem;
}
@media only screen and (min-width: 1024px) {
  .compatible-dimmer__container {
    -ms-flex-wrap: nowrap;
        flex-wrap: nowrap;
  }
}
@media only screen and (min-width: 1024px) {
  .compatible-dimmer__list {
    -ms-flex-preferred-size: 66.6666666667%;
        flex-basis: 66.6666666667%;
  }
}
.compatible-dimmer__items {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  flex-wrap: wrap;
  padding: 0.75rem 0.5rem;
}
.compatible-dimmer__item:not(:last-child)::after {
  content: "|";
  position: relative;
  padding: 0 0.25rem;
}
.compatible-dimmer__link {
  text-decoration: underline;
  -webkit-text-decoration-skip: ink;
          text-decoration-skip-ink: auto;
}
.compatible-dimmer__title {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  background-color: #ececec;
  color: #4b4b4d;
  padding: 0.5rem;
}
.compatible-dimmer__title svg {
  fill: #4b4b4d;
}
.compatible-dimmer__title .headline {
  line-height: 1.6;
}
.compatible-dimmer .icon-message:not(:last-child) {
  margin-bottom: 2rem;
}
.compatible-dimmer .icon-message__icon-left svg {
  width: 1.6666666667rem;
  height: 1.6666666667rem;
}
.compatible-dimmer .icon-message__icon-left-container {
  min-width: 3rem;
  height: 3rem;
}
.compatible-dimmer__texts {
  margin-top: 1rem;
}
@media only screen and (min-width: 1024px) {
  .compatible-dimmer__texts {
    margin-top: 0;
    -ms-flex-preferred-size: 33.3333333333%;
        flex-basis: 33.3333333333%;
    padding-left: 1rem;
  }
}
.compatible-dimmer__texts .icon-message__icon-left {
  /* stylelint-disable-next-line max-nesting-depth */
}
.compatible-dimmer__texts .icon-message__icon-left svg {
  width: 2.4rem;
  height: 2.4rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.download-dropdown {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  text-decoration: none;
}
.download-dropdown__icon {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  font-size: 2rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.download-item {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  text-decoration: none;
}
.download-item__icon {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  font-size: 2rem;
}
.download-item .button--link {
  text-decoration: none;
  padding: 0 0.25rem;
  text-align: left;
}
.download-item--configurator {
  margin: 0 0.5rem 0 0.5rem;
}
.download-item--configurator.spacing-bottom {
  margin-bottom: 0;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.technical-icons {
  margin: 1.5rem 0 1rem;
}
.technical-icons--no-spacing-top {
  margin-top: 0;
}
@media only screen and (min-width: 1200px) {
  .technical-icons--buy-box, .technical-icons--description {
    display: none;
  }
}
.technical-icons__header {
  font-weight: 700;
}
.technical-icons__icon-container, .technical-icons__icon-list {
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.technical-icons__icon-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  border-top-width: 1px;
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  padding: 0.25rem 0;
}
.technical-icons__icon-container--no-border {
  border: none;
}
.technical-icons__icon-list {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  -webkit-box-align: start;
      -ms-flex-align: start;
          align-items: flex-start;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
}
.technical-icons__icon-list .icon-button {
  font-size: 2rem;
  margin-right: 0.5rem;
  cursor: default;
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.technical-icons__icon-list .icon-button svg {
  width: 3rem;
  height: 3rem;
}
.technical-icons__icon-list .icon-button__text {
  font-size: 0.8rem;
}
.technical-icons__icon-list .icon-button__icon-container,
.technical-icons__icon-list .icon-button .icon {
  width: 2rem;
}
.technical-icons__icon-list .icon-button--rect svg {
  width: 6rem;
  height: 3rem;
}
.technical-icons__icon-list .icon-button--rect .icon-button__icon-container,
.technical-icons__icon-list .icon-button--rect .icon {
  width: 3.7333333333rem;
}
@media only screen and (min-width: 1024px) {
  .technical-icons__icon-list .icon-button__icon {
    font-size: 3rem;
  }
  .technical-icons__icon-list .icon-button__icon-container,
  .technical-icons__icon-list .icon-button .icon {
    width: 3rem;
  }
  .technical-icons__icon-list .icon-button--rect .icon-button__icon-container,
  .technical-icons__icon-list .icon-button--rect .icon {
    width: 6rem;
  }
  .technical-icons__icon-list .icon-button [class^=path],
  .technical-icons__icon-list .icon-button [class*=path] {
    font-size: 3rem;
  }
  .technical-icons__icon-list .icon-button [class^=path]::before,
  .technical-icons__icon-list .icon-button [class*=path]::before {
    margin-left: -1.5rem;
  }
}
.technical-icons__info-container, .technical-icons__icon-text {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
}
.technical-icons__info-container {
  position: relative;
  overflow: hidden;
}
.technical-icons__info-container .technical-icons__icon-text {
  -ms-flex-preferred-size: 80%;
      flex-basis: 80%;
}
.technical-icons__info-container .technical-icons__icon-info {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
}
.technical-icons__info-container .technical-icons__icon-info--icon-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 4.2666666667rem;
  margin-right: 1rem;
}
.technical-icons__info-container .technical-icons__icon-info .icon {
  font-size: 2rem;
}
.technical-icons__animation-box {
  -webkit-transform: translateY(-100%);
          transform: translateY(-100%);
  margin-top: -100%;
  -webkit-transition: all 0.5s ease-in-out;
  transition: all 0.5s ease-in-out;
}
.technical-icons__anchor-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  border-top-width: 1px;
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
  display: none;
}
@media only screen and (min-width: 1200px) {
  .technical-icons__anchor-container {
    display: block;
  }
}
.technical-icons__carets {
  margin-left: 1rem;
}
.technical-icons__open svg, .technical-icons__close svg {
  width: 0.9333333333rem;
  height: 0.9333333333rem;
}
.technical-icons__close {
  display: none;
}
.technical-icons.is-open .technical-icons__animation-box {
  -webkit-transform: translateY(0);
          transform: translateY(0);
  margin-top: 0;
}
.technical-icons.is-open .technical-icons__open {
  display: none;
}
.technical-icons.is-open .technical-icons__close {
  display: inline-block;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.variant-configurator {
  border-top-width: 1px;
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  padding-top: 1rem;
  margin-top: 0.5rem;
  margin-bottom: 1rem;
}
.variant-configurator__selection {
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  margin-left: -0.5rem;
  margin-right: -0.5rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.availability {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.availability__label {
  margin-left: 1rem;
}
.availability__label--small {
  font-size: 0.9333333333rem;
}
.availability--hide-label .availability__label {
  display: none;
}
.availability__dots {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  width: calc((0.8rem + 0.25rem * 2) * 3);
}
.availability__dot:first-child {
  margin-left: 0;
}
.availability--product-configurator {
  margin-left: 1.5rem;
  margin-bottom: 0.5rem;
}
.availability--product-configurator .availability__dots {
  width: auto;
}
.availability__dot {
  border-radius: 9999px;
  width: 0.8rem;
  height: 0.8rem;
  margin-left: 0.25rem;
  margin-right: 0.25rem;
}
.availability__dot--success {
  background-color: #019039;
}
.availability__dot--success-light {
  background-color: #abd18b;
}
.availability__dot--warning {
  background-color: #e89c30;
}
.availability__dot--alert {
  background-color: #e32213;
}
.availability__dot--info {
  background-color: #fecc00;
}
.availability__dot--neutral {
  background-color: #929292;
}
.availability__dot--inactive {
  background-color: #d0d0d0;
  color: #4b4b4d;
}
.availability__dot--inactive svg {
  fill: #4b4b4d;
}
.availability__inhouse-production {
  font-size: 2.4rem;
  line-height: 2rem;
  position: relative;
  width: 2.4rem;
  height: 1.4666666667rem;
}
.availability__inhouse-production svg {
  width: 2.4rem;
  height: 2.4rem;
}
.availability__inhouse-production svg {
  position: absolute;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.background--text {
  background-color: #4b4b4d;
}
.background--text svg {
  fill: #4b4b4d;
}
.background--white {
  background-color: #fff;
}
.background--white svg {
  fill: #fff;
}
.background--main {
  background-color: #fecc00;
}
.background--main svg {
  fill: #fecc00;
}
.background--alt {
  background-color: #4b4b4d;
}
.background--alt svg {
  fill: #4b4b4d;
}
.background--dark {
  background-color: #1a171b;
}
.background--dark svg {
  fill: #1a171b;
}
.background--black {
  background-color: #000;
}
.background--black svg {
  fill: #000;
}
.background--transparent {
  background-color: rgba(255, 255, 255, 0);
}
.background--transparent svg {
  fill: rgba(255, 255, 255, 0);
}
.background--overlay {
  background-color: rgba(255, 255, 255, 0.9);
}
.background--overlay svg {
  fill: rgba(255, 255, 255, 0.9);
}
.background--controls-overlay {
  background-color: rgba(255, 255, 255, 0.6);
}
.background--controls-overlay svg {
  fill: rgba(255, 255, 255, 0.6);
}
.background--gray-1 {
  background-color: #ececec;
}
.background--gray-1 svg {
  fill: #ececec;
}
.background--gray-2 {
  background-color: #d0d0d0;
}
.background--gray-2 svg {
  fill: #d0d0d0;
}
.background--gray-3 {
  background-color: #b2b2b2;
}
.background--gray-3 svg {
  fill: #b2b2b2;
}
.background--gray-4 {
  background-color: #929292;
}
.background--gray-4 svg {
  fill: #929292;
}
.background--gray-5 {
  background-color: #6f6f6f;
}
.background--gray-5 svg {
  fill: #6f6f6f;
}
.background--gray-6 {
  background-color: #4b4b4d;
}
.background--gray-6 svg {
  fill: #4b4b4d;
}
.background--gray-7 {
  background-color: #1a171b;
}
.background--gray-7 svg {
  fill: #1a171b;
}
.background--red-1 {
  background-color: #e32213;
}
.background--red-1 svg {
  fill: #e32213;
}
.background--red-2 {
  background-color: #e1306c;
}
.background--red-2 svg {
  fill: #e1306c;
}
.background--red-3 {
  background-color: #dd1a16;
}
.background--red-3 svg {
  fill: #dd1a16;
}
.background--facebook {
  background-color: #3b5998;
}
.background--facebook svg {
  fill: #3b5998;
}
.background--twitter {
  background-color: #0077b5;
}
.background--twitter svg {
  fill: #0077b5;
}
.background--eek-a {
  background-color: #afc70d;
}
.background--eek-a svg {
  fill: #afc70d;
}
.background--eek-a1 {
  background-color: #58ab32;
}
.background--eek-a1 svg {
  fill: #58ab32;
}
.background--eek-a2 {
  background-color: #019039;
}
.background--eek-a2 svg {
  fill: #019039;
}
.background--eek-b {
  background-color: #fdea14;
}
.background--eek-b svg {
  fill: #fdea14;
}
.background--eek-c {
  background-color: #fdcb00;
}
.background--eek-c svg {
  fill: #fdcb00;
}
.background--eek-d {
  background-color: #f19305;
}
.background--eek-d svg {
  fill: #f19305;
}
.background--eek-e {
  background-color: #e0071b;
}
.background--eek-e svg {
  fill: #e0071b;
}
.background--hover-text:hover, .background--hover-text:focus {
  background-color: #4b4b4d;
}
.background--hover-text:hover svg, .background--hover-text:focus svg {
  fill: #4b4b4d;
}
.background--hover-white:hover, .background--hover-white:focus {
  background-color: #fff;
}
.background--hover-white:hover svg, .background--hover-white:focus svg {
  fill: #fff;
}
.background--hover-main:hover, .background--hover-main:focus {
  background-color: #fecc00;
}
.background--hover-main:hover svg, .background--hover-main:focus svg {
  fill: #fecc00;
}
.background--hover-alt:hover, .background--hover-alt:focus {
  background-color: #4b4b4d;
}
.background--hover-alt:hover svg, .background--hover-alt:focus svg {
  fill: #4b4b4d;
}
.background--hover-dark:hover, .background--hover-dark:focus {
  background-color: #1a171b;
}
.background--hover-dark:hover svg, .background--hover-dark:focus svg {
  fill: #1a171b;
}
.background--hover-black:hover, .background--hover-black:focus {
  background-color: #000;
}
.background--hover-black:hover svg, .background--hover-black:focus svg {
  fill: #000;
}
.background--hover-transparent:hover, .background--hover-transparent:focus {
  background-color: rgba(255, 255, 255, 0);
}
.background--hover-transparent:hover svg, .background--hover-transparent:focus svg {
  fill: rgba(255, 255, 255, 0);
}
.background--hover-overlay:hover, .background--hover-overlay:focus {
  background-color: rgba(255, 255, 255, 0.9);
}
.background--hover-overlay:hover svg, .background--hover-overlay:focus svg {
  fill: rgba(255, 255, 255, 0.9);
}
.background--hover-controls-overlay:hover, .background--hover-controls-overlay:focus {
  background-color: rgba(255, 255, 255, 0.6);
}
.background--hover-controls-overlay:hover svg, .background--hover-controls-overlay:focus svg {
  fill: rgba(255, 255, 255, 0.6);
}
.background--hover-gray-1:hover, .background--hover-gray-1:focus {
  background-color: #ececec;
}
.background--hover-gray-1:hover svg, .background--hover-gray-1:focus svg {
  fill: #ececec;
}
.background--hover-gray-2:hover, .background--hover-gray-2:focus {
  background-color: #d0d0d0;
}
.background--hover-gray-2:hover svg, .background--hover-gray-2:focus svg {
  fill: #d0d0d0;
}
.background--hover-gray-3:hover, .background--hover-gray-3:focus {
  background-color: #b2b2b2;
}
.background--hover-gray-3:hover svg, .background--hover-gray-3:focus svg {
  fill: #b2b2b2;
}
.background--hover-gray-4:hover, .background--hover-gray-4:focus {
  background-color: #929292;
}
.background--hover-gray-4:hover svg, .background--hover-gray-4:focus svg {
  fill: #929292;
}
.background--hover-gray-5:hover, .background--hover-gray-5:focus {
  background-color: #6f6f6f;
}
.background--hover-gray-5:hover svg, .background--hover-gray-5:focus svg {
  fill: #6f6f6f;
}
.background--hover-gray-6:hover, .background--hover-gray-6:focus {
  background-color: #4b4b4d;
}
.background--hover-gray-6:hover svg, .background--hover-gray-6:focus svg {
  fill: #4b4b4d;
}
.background--hover-gray-7:hover, .background--hover-gray-7:focus {
  background-color: #1a171b;
}
.background--hover-gray-7:hover svg, .background--hover-gray-7:focus svg {
  fill: #1a171b;
}
.background--hover-red-1:hover, .background--hover-red-1:focus {
  background-color: #e32213;
}
.background--hover-red-1:hover svg, .background--hover-red-1:focus svg {
  fill: #e32213;
}
.background--hover-red-2:hover, .background--hover-red-2:focus {
  background-color: #e1306c;
}
.background--hover-red-2:hover svg, .background--hover-red-2:focus svg {
  fill: #e1306c;
}
.background--hover-red-3:hover, .background--hover-red-3:focus {
  background-color: #dd1a16;
}
.background--hover-red-3:hover svg, .background--hover-red-3:focus svg {
  fill: #dd1a16;
}
.background--hover-facebook:hover, .background--hover-facebook:focus {
  background-color: #3b5998;
}
.background--hover-facebook:hover svg, .background--hover-facebook:focus svg {
  fill: #3b5998;
}
.background--hover-twitter:hover, .background--hover-twitter:focus {
  background-color: #0077b5;
}
.background--hover-twitter:hover svg, .background--hover-twitter:focus svg {
  fill: #0077b5;
}
.background--hover-eek-a:hover, .background--hover-eek-a:focus {
  background-color: #afc70d;
}
.background--hover-eek-a:hover svg, .background--hover-eek-a:focus svg {
  fill: #afc70d;
}
.background--hover-eek-a1:hover, .background--hover-eek-a1:focus {
  background-color: #58ab32;
}
.background--hover-eek-a1:hover svg, .background--hover-eek-a1:focus svg {
  fill: #58ab32;
}
.background--hover-eek-a2:hover, .background--hover-eek-a2:focus {
  background-color: #019039;
}
.background--hover-eek-a2:hover svg, .background--hover-eek-a2:focus svg {
  fill: #019039;
}
.background--hover-eek-b:hover, .background--hover-eek-b:focus {
  background-color: #fdea14;
}
.background--hover-eek-b:hover svg, .background--hover-eek-b:focus svg {
  fill: #fdea14;
}
.background--hover-eek-c:hover, .background--hover-eek-c:focus {
  background-color: #fdcb00;
}
.background--hover-eek-c:hover svg, .background--hover-eek-c:focus svg {
  fill: #fdcb00;
}
.background--hover-eek-d:hover, .background--hover-eek-d:focus {
  background-color: #f19305;
}
.background--hover-eek-d:hover svg, .background--hover-eek-d:focus svg {
  fill: #f19305;
}
.background--hover-eek-e:hover, .background--hover-eek-e:focus {
  background-color: #e0071b;
}
.background--hover-eek-e:hover svg, .background--hover-eek-e:focus svg {
  fill: #e0071b;
}
.background--gradient-radial-light {
  background: radial-gradient(ellipse at center, #fff 40%, #ececec 100%);
}
.background--gradient-radial-dark {
  background: radial-gradient(ellipse at center, #6f6f6f 28%, #4b4b4d 100%);
}
.background--gradient-linear-white-transparent {
  background: -webkit-gradient(linear, left bottom, left top, color-stop(1%, #fff), to(rgba(255, 255, 255, 0)));
  background: linear-gradient(0deg, #fff 1%, rgba(255, 255, 255, 0) 100%);
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.border {
  border: 1px solid #000;
}
.border--radius-circle {
  border-radius: 9999px;
}
.border--text {
  border-color: #4b4b4d;
}
.border--white {
  border-color: #fff;
}
.border--main {
  border-color: #fecc00;
}
.border--alt {
  border-color: #4b4b4d;
}
.border--dark {
  border-color: #1a171b;
}
.border--black {
  border-color: #000;
}
.border--transparent {
  border-color: rgba(255, 255, 255, 0);
}
.border--overlay {
  border-color: rgba(255, 255, 255, 0.9);
}
.border--controls-overlay {
  border-color: rgba(255, 255, 255, 0.6);
}
.border--gray-1 {
  border-color: #ececec;
}
.border--gray-2 {
  border-color: #d0d0d0;
}
.border--gray-3 {
  border-color: #b2b2b2;
}
.border--gray-4 {
  border-color: #929292;
}
.border--gray-5 {
  border-color: #6f6f6f;
}
.border--gray-6 {
  border-color: #4b4b4d;
}
.border--gray-7 {
  border-color: #1a171b;
}
.border--red-1 {
  border-color: #e32213;
}
.border--red-2 {
  border-color: #e1306c;
}
.border--red-3 {
  border-color: #dd1a16;
}
.border--facebook {
  border-color: #3b5998;
}
.border--twitter {
  border-color: #0077b5;
}
.border--eek-a {
  border-color: #afc70d;
}
.border--eek-a1 {
  border-color: #58ab32;
}
.border--eek-a2 {
  border-color: #019039;
}
.border--eek-b {
  border-color: #fdea14;
}
.border--eek-c {
  border-color: #fdcb00;
}
.border--eek-d {
  border-color: #f19305;
}
.border--eek-e {
  border-color: #e0071b;
}
.border--md {
  border-width: 2px;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.headline {
  font-weight: 300;
  font-size: 2.4rem;
  margin-bottom: 0.4rem;
  white-space: normal;
}
.headline--product-name {
  -ms-word-break: break-all;
  word-break: break-all;
  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
  word-break: break-word;
  -ms-hyphens: auto;
      hyphens: auto;
  text-transform: uppercase;
  font-size: 1.2rem;
  font-weight: 700;
}
.headline--hyphens-manual {
  -ms-hyphens: manual;
      hyphens: manual;
}
.headline--hyphens-auto {
  -ms-hyphens: auto;
      hyphens: auto;
}
.headline--no-spacing {
  margin: 0;
  padding: 0;
}
.headline--uppercase {
  text-transform: uppercase;
}
.headline--underline {
  text-decoration: underline;
}
.headline--country-list {
  margin-left: 1rem;
  margin-bottom: 0;
}
.headline--small {
  font-size: 0.9333333333rem;
}
.headline--default {
  font-size: 1rem;
}
.headline--medium-small {
  font-size: 1.0666666667rem;
}
.headline--medium {
  font-size: 1.2rem;
  line-height: 1.5;
}
.headline--white {
  color: #fff;
}
.headline--black {
  color: #000;
}
.headline--fw-medium {
  font-weight: 500;
}
.headline--bold {
  font-weight: 700;
}
.headline--h2 {
  font-size: 2rem;
}
.headline--h3 {
  font-size: 1.4666666667rem;
}
.headline--h4 {
  font-size: 1.2rem;
}
.headline--h5 {
  font-size: 1.0666666667rem;
}
.headline--h6 {
  font-size: 1rem;
  line-height: 1.1;
  margin: 0;
}
.headline--strong, .headline--span {
  display: block;
}
.headline--lh-1 {
  line-height: 1.1;
}
.headline--lh-2 {
  line-height: 1.2;
}
.headline--lh-4 {
  line-height: 1.6;
}
.headline--lh-6 {
  line-height: 1.9;
}
.headline--center {
  width: 100%;
  text-align: center;
}
.headline--right {
  text-align: right;
}
.headline--left {
  text-align: left;
}
.headline--justify {
  text-align: justify;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.line {
  width: 100%;
}
.line--yellow {
  border-color: #fecc00;
}
.line--light-gray {
  border-color: #d0d0d0;
}
.line--dark-gray {
  border-color: #4b4b4d;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.markdown ul,
.markdown ol {
  position: relative;
  font-size: 0.9333333333rem;
}
.markdown ul li,
.markdown ol li {
  position: relative;
  line-height: 2;
}
.markdown ul li {
  padding-left: 1.5rem;
}
.markdown ul li::before {
  position: absolute;
  content: "•";
  font-size: 1.0666666667rem;
  top: -0.1333333333rem;
  left: 0.5rem;
}
.markdown ol {
  padding-left: 2rem;
}
.markdown h1 {
  font-size: 2.2666666667rem;
  line-height: 2.6666666667rem;
  font-weight: 700;
}
.markdown h2 {
  font-size: 2rem;
  line-height: 2.2666666667rem;
  font-weight: 400;
}
.markdown h3 {
  font-size: 1.6rem;
  line-height: 2rem;
  font-weight: 700;
}
.markdown h4 {
  font-size: 1.2rem;
  line-height: 1.3333333333rem;
  font-weight: 700;
}
.markdown h5 {
  font-size: 1.0666666667rem;
  font-weight: 400;
}
.markdown h6 {
  font-size: 0.9333333333rem;
  font-weight: 400;
  line-height: 1.1;
  margin: 0;
}
.markdown h1,
.markdown h2,
.markdown h3,
.markdown h4,
.markdown h5,
.markdown h6 {
  font-weight: 300;
}
.markdown a {
  text-decoration: underline;
}
.markdown a:hover {
  color: #fecc00;
}
.markdown p {
  margin: 1rem 0;
}
.markdown--left {
  text-align: left;
}
.markdown--center {
  text-align: center;
}
.markdown--right {
  text-align: right;
}
.markdown--justify {
  text-align: justify;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.overlay-block {
  background: rgba(111, 111, 111, 0.4);
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 350;
  pointer-events: none;
  visibility: hidden;
  opacity: 0;
  -webkit-transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
}
@media only screen and (max-width: 1023px) {
  .overlay-block {
    display: none;
  }
}
.overlay-block--is-shown {
  pointer-events: all;
  visibility: visible;
  opacity: 1;
}
.overlay-block--no-search, .overlay-block--no-agent-user {
  z-index: 699;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.storyblok-stub .json-container {
  padding: 1rem;
}
.storyblok-stub .json-container .component-name {
  font-weight: bold;
}
.storyblok-stub .json-container .disclosure {
  color: #09b3af;
  font-size: 150%;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.svg-icon {
  fill: none;
  width: auto;
  height: auto;
  display: inline-block;
  vertical-align: middle;
  -webkit-user-select: unset;
     -moz-user-select: unset;
      -ms-user-select: unset;
          user-select: unset;
}
.svg-icon [class^=path],
.svg-icon [class*=path] {
  font-size: 2rem;
  width: auto;
}
.svg-icon--is-sprite {
  fill: currentColor;
  width: 1rem;
  height: 1rem;
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
}
.svg-icon--technical {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.svg-icon--belgium {
  width: 100%;
  height: 4.6666666667rem;
}
.svg-icon--logo {
  width: 100%;
  height: 4.6666666667rem;
}
@media only screen and (min-width: 550px) {
  .svg-icon--logo {
    height: 7rem;
    max-width: 100%;
  }
}
.svg-icon--checkout {
  width: 7.2666666667rem;
  height: 2.1333333333rem;
}
@media only screen and (min-width: 768px) {
  .svg-icon--checkout {
    width: 11.1333333333rem;
    height: 4rem;
  }
}
.svg-icon--header-check {
  width: 0.8rem;
  height: 0.6rem;
  margin: -0.1333333333rem 0.6rem 0 0;
}
.svg-icon--progress-check {
  width: 0.4666666667rem;
  height: 0.3333333333rem;
}
@media only screen and (min-width: 550px) {
  .svg-icon--progress-check {
    width: 0.6666666667rem;
    height: 0.5333333333rem;
  }
}
.svg-icon--quick-order {
  width: 1.4rem;
  height: 1rem;
}
@media only screen and (min-width: 768px) {
  .svg-icon--quick-order {
    width: 2.1333333333rem;
    height: 1.2666666667rem;
    margin-top: 0.6666666667rem;
  }
}
.svg-icon--info-box {
  font-size: 1.6666666667rem;
}
.svg-icon--quick-order-delete-row {
  width: 0.9333333333rem;
  height: 1rem;
  fill: #d0d0d0;
}
.svg-icon--header-shopping-list {
  width: 0.8666666667rem;
  height: 0.8rem;
}
@media only screen and (min-width: 768px) {
  .svg-icon--header-shopping-list {
    width: 1.1333333333rem;
    height: 1.0666666667rem;
    margin-top: 0.6666666667rem;
  }
}
.svg-icon--cart {
  width: 1.3333333333rem;
  height: 1.1333333333rem;
}
@media only screen and (min-width: 768px) {
  .svg-icon--cart {
    width: 2rem;
    height: 1.7333333333rem;
  }
}
.svg-icon--dealer-search-registration {
  font-size: 1.6666666667rem;
  margin-right: 0.75rem;
}
.svg-icon--cross {
  width: 0.6666666667rem;
  height: 0.6666666667rem;
}
.svg-icon--reverse {
  -webkit-transform: rotate(180deg);
          transform: rotate(180deg);
}
.svg-icon--toggler-cross {
  position: relative;
  width: 0.6666666667rem;
  height: 0.6666666667rem;
}
.svg-icon--toggler-cross::before, .svg-icon--toggler-cross::after {
  content: "";
  position: absolute;
  background-color: #6f6f6f;
}
.svg-icon--toggler-cross::before {
  height: 0.1333333333rem;
  width: 100%;
  top: 50%;
  left: 0;
  -webkit-transform: translateY(-50%);
          transform: translateY(-50%);
}
@media only screen and (min-width: 768px) {
  .svg-icon--toggler-cross::before {
    height: 0.2rem;
  }
}
.svg-icon--toggler-cross::after {
  height: 100%;
  width: 0.1333333333rem;
  top: 0;
  left: 50%;
  -webkit-transform: translateX(-50%);
          transform: translateX(-50%);
}
@media only screen and (min-width: 768px) {
  .svg-icon--toggler-cross::after {
    width: 0.2rem;
  }
}
.active .svg-icon--toggler-cross::after {
  display: none;
}
.svg-icon--toggler-cross-thin::before {
  height: 0.1333333333rem;
}
.svg-icon--toggler-cross-thin::after {
  width: 0.1333333333rem;
}
.svg-icon--cart-plus {
  display: inline-block;
  width: 1.7333333333rem;
  height: 1.5333333333rem;
  margin: -0.4rem 0.8rem -0.1333333333rem 0;
}
.svg-icon--toggler-cross-link::before, .svg-icon--toggler-cross-link::after {
  background-color: #b2b2b2;
}
.svg-icon--link {
  -webkit-transition: color 250ms ease-in-out;
  transition: color 250ms ease-in-out;
  color: #d0d0d0;
  margin-right: 0.4rem;
}
.svg-icon--shipment {
  width: 5.5333333333rem;
}
.svg-icon--dhl-logo {
  width: 4.8666666667rem;
}
.svg-icon--invoice-logo {
  width: 3.4666666667rem;
  height: 1.3333333333rem;
}
@media only screen and (min-width: 768px) {
  .svg-icon--invoice-logo {
    width: 5.5333333333rem;
    height: 1.8666666667rem;
  }
}
.svg-icon--invoice-logo-small {
  width: 3.6666666667rem;
  height: 1.4666666667rem;
}
.svg-icon--payment-logo {
  position: absolute;
  top: 1.8rem;
  right: 1.3333333333rem;
}
@media only screen and (min-width: 768px) {
  .svg-icon--payment-logo {
    top: 1.8rem;
    right: 2rem;
  }
}
.svg-icon--summary-shipping {
  width: 3.5333333333rem;
}
.svg-icon--overview {
  width: 1.1333333333rem;
  height: 1.0666666667rem;
}
.svg-icon--users {
  width: 1.9333333333rem;
  height: 1.2666666667rem;
}
.svg-icon--business-unit {
  width: 1.4666666667rem;
  height: 1.4666666667rem;
}
.svg-icon--role {
  height: 0.9333333333rem;
}
.svg-icon--plus-small {
  width: 0.6666666667rem;
  height: 0.6666666667rem;
  position: relative;
  top: -0.0666666667rem;
}
.svg-icon--add-to-list {
  position: relative;
  top: 0.0666666667rem;
  width: 1.7333333333rem;
  height: 1.7333333333rem;
}
.svg-icon--success {
  width: 8rem;
  height: 8rem;
  margin-bottom: -1.4666666667rem;
}
.svg-icon--footer {
  height: 1.8666666667rem;
  width: 6.2rem;
}
.svg-icon--invoice-logo-footer {
  width: 4.8666666667rem;
}
.svg-icon--pay-pal-logo-footer {
  width: 4.2666666667rem;
}
.svg-icon--klarna-logo-footer {
  width: 4.5333333333rem;
}
.svg-icon--dhl-logo-footer {
  width: 5.0666666667rem;
}
.svg-icon--copyright {
  width: 7.0666666667rem;
  height: 3.2rem;
}
@media only screen and (min-width: 768px) {
  .svg-icon--view-mode-switch {
    margin-right: 0.6rem;
  }
}
.svg-icon--reset {
  -webkit-transition: color 250ms ease-in-out;
  transition: color 250ms ease-in-out;
  margin-right: 0.5333333333rem;
  color: #6f6f6f;
}
.svg-icon--chevron {
  width: 0.6666666667rem;
  height: 0.6666666667rem;
}
.svg-icon--create-list {
  vertical-align: bottom;
  height: 1.2rem;
  width: 1.2rem;
}
.svg-icon--create-new-cart {
  width: 1.6rem;
  height: 1.2rem;
  vertical-align: bottom;
}
.svg-icon--trolley {
  width: 1.3333333333rem;
}
.svg-icon--title {
  width: 2.3333333333rem;
  height: 1.7333333333rem;
}
.svg-icon--sm-lg-regular {
  width: 1.0666666667rem;
  height: 1.0666666667rem;
}
@media only screen and (min-width: 768px) {
  .svg-icon--sm-lg-regular {
    width: 1.3333333333rem;
    height: 1.3333333333rem;
  }
}
.svg-icon--validation-message {
  color: #fecc00;
  font-size: 2.4rem;
  margin-right: 0.5rem;
}
.svg-icon--warning-message {
  color: #fecc00;
  font-size: 1rem;
  margin-right: 0.5rem;
}
.svg-icon--sm-lg-bigger {
  width: 1.0666666667rem;
  height: 1.0666666667rem;
}
@media only screen and (min-width: 768px) {
  .svg-icon--sm-lg-bigger {
    width: 1.6rem;
    height: 1.6rem;
  }
}
.svg-icon--browse-file {
  width: 1.8666666667rem;
  height: 1.8666666667rem;
}
.svg-icon--download-file {
  position: absolute;
  left: 0;
  top: 0;
  width: 2rem;
  height: 2rem;
}
.svg-icon--remove-file {
  -webkit-transition: color 250ms ease-in-out;
  transition: color 250ms ease-in-out;
  margin: -0.1333333333rem 0 0 0.3333333333rem;
  cursor: pointer;
}
.svg-icon--remove-file:hover {
  color: #929292;
}
.svg-icon--clock {
  width: 0.8rem;
  height: 0.8rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.text--uppercase {
  text-transform: uppercase;
}
.text--text {
  color: #4b4b4d;
}
.text--white {
  color: #fff;
}
.text--main {
  color: #fecc00;
}
.text--alt {
  color: #4b4b4d;
}
.text--dark {
  color: #1a171b;
}
.text--black {
  color: #000;
}
.text--transparent {
  color: rgba(255, 255, 255, 0);
}
.text--overlay {
  color: rgba(255, 255, 255, 0.9);
}
.text--controls-overlay {
  color: rgba(255, 255, 255, 0.6);
}
.text--gray-1 {
  color: #ececec;
}
.text--gray-2 {
  color: #d0d0d0;
}
.text--gray-3 {
  color: #b2b2b2;
}
.text--gray-4 {
  color: #929292;
}
.text--gray-5 {
  color: #6f6f6f;
}
.text--gray-6 {
  color: #4b4b4d;
}
.text--gray-7 {
  color: #1a171b;
}
.text--red-1 {
  color: #e32213;
}
.text--red-2 {
  color: #e1306c;
}
.text--red-3 {
  color: #dd1a16;
}
.text--facebook {
  color: #3b5998;
}
.text--twitter {
  color: #0077b5;
}
.text--eek-a {
  color: #afc70d;
}
.text--eek-a1 {
  color: #58ab32;
}
.text--eek-a2 {
  color: #019039;
}
.text--eek-b {
  color: #fdea14;
}
.text--eek-c {
  color: #fdcb00;
}
.text--eek-d {
  color: #f19305;
}
.text--eek-e {
  color: #e0071b;
}
.text--success {
  color: #019039;
}
.text--success-light {
  color: #abd18b;
}
.text--warning {
  color: #e89c30;
}
.text--alert {
  color: #e32213;
}
.text--info {
  color: #fecc00;
}
.text--neutral {
  color: #929292;
}
.text--fw-light {
  font-weight: 300;
}
.text--fw-regular {
  font-weight: 400;
}
.text--fw-medium {
  font-weight: 500;
}
.text--fw-bold {
  font-weight: 700;
}
.text--fs-1 {
  font-size: 2.4rem;
}
.text--fs-2 {
  font-size: 2rem;
}
.text--fs-3 {
  font-size: 1.4666666667rem;
}
.text--fs-4 {
  font-size: 1.2rem;
}
.text--fs-5 {
  font-size: 1rem;
}
.text--fs-6 {
  font-size: 0.9333333333rem;
}
.text--fs-7 {
  font-size: 0.8rem;
}
.text--fs-big {
  font-size: 2.4rem;
}
.text--fs-medium-big {
  font-size: 1.6666666667rem;
}
.text--fs-medium {
  font-size: 1.2rem;
}
.text--fs-medium-small {
  font-size: 1.0666666667rem;
}
.text--fs-default {
  font-size: 1rem;
}
.text--fs-small {
  font-size: 0.9333333333rem;
}
.text--fs-tiny {
  font-size: 0.8rem;
}
.text--fs-storyblok-h1 {
  font-size: 2.2666666667rem;
}
.text--fs-storyblok-h2 {
  font-size: 2rem;
}
.text--fs-storyblok-h3 {
  font-size: 1.6rem;
}
.text--fs-storyblok-h4 {
  font-size: 1.2rem;
}
.text--fs-storyblok-h5 {
  font-size: 1.0666666667rem;
}
.text--fs-storyblok-default {
  font-size: 0.9333333333rem;
}
.text--fs-storyblok-medium {
  font-size: 1.2rem;
}
.text--fs-storyblok-medium-small {
  font-size: 1.0666666667rem;
}
.text--fs-storyblok-medium-big {
  font-size: 1.3333333333rem;
}
.text--fs-storyblok-small {
  font-size: 0.8rem;
}
.text--fs-storyblok-tiny {
  font-size: 0.7333333333rem;
}
.text--fs-storyblok-headline-big {
  font-size: 2.5333333333rem;
}
.text--center {
  text-align: center;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.abstract-tabs-element {
  position: relative;
}
.abstract-tabs-element__nav {
  display: none;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
  border-bottom: 0.0666666667rem solid #ececec;
}
@media only screen and (min-width: 768px) {
  .abstract-tabs-element__nav {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
  }
}
.abstract-tabs-element__nav-item {
  background-color: #ececec;
  color: #4b4b4d;
  border-top-left-radius: 10px;
  border-top-right-radius: 10px;
  position: relative;
  font-size: 1.2rem;
  padding: 0.5rem;
  text-align: center;
  cursor: pointer;
  width: 100%;
}
.abstract-tabs-element__nav-item svg {
  fill: #4b4b4d;
}
.abstract-tabs-element__nav-item.is--disabled {
  position: relative;
  background: transparent;
  color: #d0d0d0;
  /* stylelint-disable-next-line max-nesting-depth */
}
.abstract-tabs-element__nav-item.is--disabled:hover {
  cursor: not-allowed;
}
.abstract-tabs-element__nav-item:not(:last-child) {
  margin-right: 0.0666666667rem;
}
.abstract-tabs-element__nav-item .abstract-tabs-element__link {
  color: #4b4b4d;
  /* stylelint-disable-next-line max-nesting-depth */
}
.abstract-tabs-element__nav-item .abstract-tabs-element__link:hover {
  color: #4b4b4d;
}
.abstract-tabs-element__nav-item.active {
  background-color: #4b4b4d;
  color: #fff;
  color: #fff;
}
.abstract-tabs-element__nav-item.active svg {
  fill: #fff;
}
.abstract-tabs-element__nav-item.active .abstract-tabs-element__link {
  color: #fff;
  /* stylelint-disable-next-line max-nesting-depth */
}
.abstract-tabs-element__nav-item.active .abstract-tabs-element__link:hover {
  color: #fff;
}
.abstract-tabs-element__content {
  min-height: 2.1333333333rem;
  position: relative;
  width: 100%;
}
@media only screen and (min-width: 768px) {
  .abstract-tabs-element__content {
    display: none;
    min-height: 0;
  }
}
.abstract-tabs-element__content::before {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  content: attr(data-title);
  width: 100%;
  position: relative;
  background-color: #ececec;
  height: 3.3333333333rem;
  padding-left: 1rem;
  margin-bottom: 0.6666666667rem;
}
@media only screen and (min-width: 768px) {
  .abstract-tabs-element__content::before {
    display: none;
  }
}
.abstract-tabs-element__content::after {
  content: "\e9e6";
  position: absolute;
  color: #000;
  top: 1rem;
  right: 0.6666666667rem;
}
@media only screen and (min-width: 768px) {
  .abstract-tabs-element__content::after {
    display: none;
  }
}
.abstract-tabs-element__content > .abstract-tabs-element__content-body {
  display: none;
}
.abstract-tabs-element__content.active {
  display: block;
}
.abstract-tabs-element__content.active::before {
  background-color: #4b4b4d;
  color: #fff;
  margin-bottom: 0;
}
.abstract-tabs-element__content.active::after {
  content: "\ea3a";
  position: absolute;
  color: #fff;
  top: 1rem;
  right: 0.6666666667rem;
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 768px) {
  .abstract-tabs-element__content.active::after {
    display: none;
  }
}
.abstract-tabs-element__content.active > .abstract-tabs-element__content-body {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.side-drawer {
  position: relative;
  z-index: 701;
}
@media only screen and (min-width: 1025px) {
  .side-drawer {
    display: none;
  }
}
.side-drawer__overlay {
  pointer-events: none;
  visibility: hidden;
  opacity: 0;
  -webkit-transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  background-color: rgba(111, 111, 111, 0.4);
}
.side-drawer__drawer {
  -webkit-box-shadow: 0 2px 5px 1px rgba(0, 0, 0, 0.2);
          box-shadow: 0 2px 5px 1px rgba(0, 0, 0, 0.2);
  pointer-events: none;
  visibility: hidden;
  opacity: 0;
  -webkit-transition: left 250ms ease-in-out, visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  transition: left 250ms ease-in-out, visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  position: fixed;
  top: 0;
  left: -25rem;
  width: 100%;
  height: 100%;
  background-color: #fff;
  overflow: hidden;
}
@media only screen and (min-width: 550px) {
  .side-drawer__drawer {
    width: 25rem;
  }
}
@media only screen and (min-width: 768px) {
  .side-drawer__drawer--logged {
    padding-top: 3.3333333333rem;
  }
}
.side-drawer__holder {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  overflow: hidden;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}
.side-drawer__navigation-top {
  padding-left: 1rem;
  padding-right: 1rem;
  line-height: 2rem;
}
@media only screen and (min-width: 768px) {
  .side-drawer__navigation-top-actions {
    display: none;
  }
}
.side-drawer__close-row {
  border-top-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  line-height: 3rem;
}
.side-drawer__close {
  background-color: #fff;
  color: #4b4b4d;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  font-size: 1.3333333333rem;
  padding-left: 1rem;
  padding-right: 1rem;
  cursor: pointer;
}
.side-drawer__close svg {
  fill: #4b4b4d;
}
.side-drawer__close svg {
  width: 1.3333333333rem;
  height: 1.3333333333rem;
  margin-left: 0.5rem;
}
.side-drawer__close-label {
  font-size: 1rem;
}
.side-drawer__user-link {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: end;
      -ms-flex-align: end;
          align-items: flex-end;
  padding: 0.8rem 0;
  font-weight: 700;
  line-height: 1.0666666667rem;
  font-size: 0.6666666667rem;
  letter-spacing: 0.04rem;
  text-transform: uppercase;
}
.side-drawer__user-link-icon {
  margin-right: 0.6666666667rem;
}
.side-drawer__navigation {
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
  position: relative;
}
.side-drawer__info {
  -ms-flex-negative: 0;
      flex-shrink: 0;
  padding-bottom: 1.6666666667rem;
}
.side-drawer__contact {
  display: block;
  padding: 1.0666666667rem 1rem 1.0666666667rem 4.2666666667rem;
  border-radius: 0.1333333333rem;
  border: 0.0666666667rem solid #ececec;
  color: #d0d0d0;
  position: relative;
}
.side-drawer__contact-icon {
  position: absolute;
  left: 1.3333333333rem;
  top: 50%;
  -webkit-transform: translateY(-50%);
          transform: translateY(-50%);
}
.side-drawer__contact-text {
  display: block;
  font-size: 0.9333333333rem;
  line-height: 1.2;
}
.side-drawer__contact-text--weight {
  font-weight: 500;
}
.side-drawer--show .side-drawer__overlay {
  pointer-events: all;
  visibility: visible;
  opacity: 1;
}
.side-drawer--show .side-drawer__drawer {
  pointer-events: all;
  visibility: visible;
  opacity: 1;
  left: 0;
  top: 0;
}

.account-navigation {
  position: relative;
  z-index: 701;
}
@media only screen and (min-width: 1025px) {
  .account-navigation {
    display: none;
  }
}
.account-navigation__overlay {
  pointer-events: none;
  visibility: hidden;
  opacity: 0;
  -webkit-transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  transition: visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  background-color: rgba(111, 111, 111, 0.4);
}
.account-navigation__drawer {
  -webkit-box-shadow: 0 2px 5px 1px rgba(0, 0, 0, 0.2);
          box-shadow: 0 2px 5px 1px rgba(0, 0, 0, 0.2);
  pointer-events: none;
  visibility: hidden;
  opacity: 0;
  -webkit-transition: left 250ms ease-in-out, visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  transition: left 250ms ease-in-out, visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  position: fixed;
  top: 0;
  left: -25rem;
  width: 100%;
  height: 100%;
  background-color: #fff;
  overflow: hidden;
}
@media only screen and (min-width: 550px) {
  .account-navigation__drawer {
    width: 25rem;
  }
}
@media only screen and (min-width: 768px) {
  .account-navigation__drawer--logged {
    padding-top: 3.3333333333rem;
  }
}
.account-navigation__holder {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  overflow: hidden;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}
.account-navigation__navigation-top {
  padding-left: 1rem;
  padding-right: 1rem;
  line-height: 2rem;
}
@media only screen and (min-width: 768px) {
  .account-navigation__navigation-top-actions {
    display: none;
  }
}
.account-navigation__close-row {
  border-top-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  line-height: 3rem;
}
.account-navigation__close {
  background-color: #fff;
  color: #4b4b4d;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  font-size: 1.3333333333rem;
  padding-left: 1rem;
  padding-right: 1rem;
  cursor: pointer;
}
.account-navigation__close svg {
  fill: #4b4b4d;
}
.account-navigation__close svg {
  width: 1.3333333333rem;
  height: 1.3333333333rem;
  margin-left: 0.5rem;
}
.account-navigation__close-label {
  font-size: 1rem;
}
.account-navigation__user-link {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: end;
      -ms-flex-align: end;
          align-items: flex-end;
  padding: 0.8rem 0;
  font-weight: 700;
  line-height: 1.0666666667rem;
  font-size: 0.6666666667rem;
  letter-spacing: 0.04rem;
  text-transform: uppercase;
}
.account-navigation__user-link-icon {
  margin-right: 0.6666666667rem;
}
.account-navigation__navigation {
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
  position: relative;
}
.account-navigation__info {
  -ms-flex-negative: 0;
      flex-shrink: 0;
  padding-bottom: 1.6666666667rem;
}
.account-navigation__contact {
  display: block;
  padding: 1.0666666667rem 1rem 1.0666666667rem 4.2666666667rem;
  border-radius: 0.1333333333rem;
  border: 0.0666666667rem solid #ececec;
  color: #d0d0d0;
  position: relative;
}
.account-navigation__contact-icon {
  position: absolute;
  left: 1.3333333333rem;
  top: 50%;
  -webkit-transform: translateY(-50%);
          transform: translateY(-50%);
}
.account-navigation__contact-text {
  display: block;
  font-size: 0.9333333333rem;
  line-height: 1.2;
}
.account-navigation__contact-text--weight {
  font-weight: 500;
}
.account-navigation--show .account-navigation__overlay {
  pointer-events: all;
  visibility: visible;
  opacity: 1;
}
.account-navigation--show .account-navigation__drawer {
  pointer-events: all;
  visibility: visible;
  opacity: 1;
  left: 0;
  top: 0;
}
@media only screen and (min-width: 769px) {
  .account-navigation {
    display: none;
  }
}
.account-navigation__drawer {
  -webkit-transition: right 250ms ease-in-out, visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  transition: right 250ms ease-in-out, visibility 250ms ease-in-out, opacity 250ms ease-in-out;
  width: 21.3333333333rem;
  left: auto;
  padding-top: 0;
  right: -21.3333333333rem;
  top: 0;
}
.account-navigation--show .account-navigation__drawer {
  left: auto;
  right: 0;
}
.account-navigation__close {
  right: 0;
  top: 0.3333333333rem;
  left: auto;
  color: #fff;
}
.account-navigation__account {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  padding: 1.0666666667rem 3.3333333333rem 1.0666666667rem 1.6rem;
  color: #fff;
  background: #342483;
  -ms-flex-negative: 0;
      flex-shrink: 0;
}
.account-navigation__account--company {
  background: #fecc00;
}
.account-navigation__account-icon {
  -ms-flex-negative: 0;
      flex-shrink: 0;
  margin-right: 2rem;
}
.account-navigation__account-text {
  font-size: 0.9333333333rem;
  line-height: 0.9333333333rem;
  font-weight: 500;
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
}
.account-navigation__holder {
  padding: 0 1.3333333333rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.buy-box {
  background-color: #ececec;
  color: #4b4b4d;
  padding: 1.5rem;
}
.buy-box svg {
  fill: #4b4b4d;
}
.buy-box__top {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
}
.buy-box__bottom {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
.buy-box__sku-energy {
  line-height: 2;
}
.buy-box__energy-label {
  font-size: 3.3333333333rem;
  line-height: 1.0666666667rem;
}
.buy-box__energy-label svg {
  width: 3.3333333333rem;
  height: 3.3333333333rem;
}
.buy-box__energy-label-placeholder {
  height: 3.3333333333rem;
}
.buy-box__official-price--reduced .price__amount-value {
  font-weight: normal;
  color: #b2b2b2;
}
.buy-box__official-price--reduced .price__mode {
  display: none;
}
.buy-box__custom-price {
  text-align: right;
}
.buy-box__tooltip {
  position: relative;
  display: inline-block;
}
.buy-box__tooltip .icon {
  cursor: auto;
}
.buy-box__tooltip .buy-box__tooltip-container {
  -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0;
          box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0;
  display: none;
  background-color: #fff;
  color: #4b4b4d;
  text-align: center;
  padding: 0.5rem;
  position: absolute;
  z-index: 1;
  bottom: 2.5333333333rem;
  margin-left: -5.3333333333rem;
  font-size: 0.9333333333rem;
}
.buy-box__tooltip:hover .buy-box__tooltip-container {
  display: block;
  color: #4b4b4d;
}
.buy-box__tooltip .buy-box__tooltip-container::after {
  border-width: 0.4666666667rem;
  border-style: solid;
  border-color: #fff transparent transparent transparent;
  content: "";
  position: absolute;
  bottom: -0.8rem;
  right: 0.4666666667rem;
}
.buy-box__actions-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
}
@media only screen and (min-width: 550px) {
  .buy-box__actions-container {
    -webkit-box-pack: end;
        -ms-flex-pack: end;
            justify-content: flex-end;
  }
}
@media only screen and (max-width: 1200px) {
  .buy-box__actions-container {
    margin-top: 1rem;
  }
}
@media only screen and (min-width: 550px) {
  .buy-box__actions-container--has-add-to-cart-button {
    margin-left: 1rem;
  }
}
@media only screen and (min-width: 550px) {
  .buy-box__find-seller-button {
    display: none;
  }
}
.buy-box__availability {
  padding-top: 0.5rem;
}
.buy-box__badge {
  height: 1.8666666667rem;
  width: auto;
  display: none;
}
@media only screen and (min-width: 550px) {
  .buy-box__badge {
    display: block;
  }
}
.buy-box__price-on-request {
  margin: 1rem 0;
}
.buy-box .icon--info-text {
  font-size: 1.8rem;
}
.buy-box__slvtec-container {
  margin-top: 1rem;
}
.buy-box__slvtec-link {
  color: #01a3ec;
  text-decoration: underline;
  padding: 0;
}
.buy-box__slvtec-link .button__label-container {
  width: -webkit-fit-content;
  width: -moz-fit-content;
  width: fit-content;
}
.buy-box__slvtec-link:hover {
  color: #4b4b4d;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.cookiebar__cookie-wrapper {
  background-color: #4b4b4d;
  color: #fff;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  position: fixed;
  bottom: 0;
  width: 100%;
  z-index: 10000;
}
.cookiebar__cookie-wrapper svg {
  fill: #fff;
}
.cookiebar__button-wrapper {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  margin-left: 1.5rem;
}
.cookiebar__cookie-container {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  height: auto;
  margin: 1rem auto;
  max-width: 80rem;
  padding: 0 1rem;
  width: 100%;
}
.cookiebar__cookie-container .button:hover {
  border-width: 1px;
  border-style: solid;
  border-color: white;
  background-color: #4b4b4d;
  color: #fff;
}
.cookiebar__cookie-container .button:hover svg {
  fill: #fff;
}
.cookiebar__cookie-information {
  margin-left: 0;
  width: 90%;
}
.cookiebar__cookie-information a {
  color: #fff;
  text-decoration: underline;
}
.cookiebar__cookie-information a:hover {
  color: #fecc00;
  text-decoration: none;
}
.cookiebar__cookie-further-information {
  color: #fff;
  text-decoration: underline;
  margin-left: 0.25rem;
}
.cookiebar__cookie-further-information:hover {
  text-decoration: none;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.fastcalc {
  background-image: radial-gradient(at center center, #6f6f6f 28%, #4b4b4d 101%);
  margin-top: 1.6666666667rem;
  padding: 1.5rem 1rem;
}
.fastcalc__fastcalc {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
}
.fastcalc__fastcalc .icon {
  cursor: default;
}
.fastcalc__fastcalc .icon::before {
  font-size: 4rem;
}
.fastcalc__title, .fastcalc__text {
  color: #fff;
}
.fastcalc__title {
  font-weight: 700;
  font-size: 1.2rem;
  line-height: 1.6;
}
@media only screen and (min-width: 1024px) {
  .fastcalc .button {
    padding: 7.5px 7.5px 7.5px 1.4666666667rem;
    padding: 0.5rem 0.5rem 0.5rem 1.4666666667rem;
  }
  .fastcalc .button__icon-right {
    padding-left: 1.6666666667rem;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.filter-selection-modal__filter-group-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  padding-bottom: 6rem;
}
@media only screen and (min-width: 768px) {
  .filter-selection-modal__filter-group-container {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
  }
}
@media only screen and (min-width: 768px) {
  .filter-selection-modal__filter-column {
    -webkit-box-flex: 1;
        -ms-flex: 1;
            flex: 1;
  }
}
.filter-selection-modal__bottom-bar {
  background-color: #fff;
  color: #4b4b4d;
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  padding: 1rem;
}
.filter-selection-modal__bottom-bar svg {
  fill: #4b4b4d;
}
.filter-selection-modal__submit-button-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
}
@media only screen and (min-width: 768px) {
  .filter-selection-modal__submit-button-container {
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
  }
}
.filter-selection-modal__modal-window .modal-window__container {
  position: relative;
  max-width: 60rem;
}
.filter-selection-modal__filter-group {
  padding-top: 1rem;
  padding-bottom: 1rem;
}
.filter-selection-modal__filter-row {
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
@media only screen and (min-width: 768px) {
  .find-dealer {
    margin-left: 2rem;
  }
}
.find-dealer--pdp {
  border-top-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  margin-top: 1rem;
  padding-top: 1rem;
  margin-left: 0;
}
.find-dealer__button-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-flow: wrap;
      flex-flow: wrap;
  width: 100%;
}
.find-dealer__button-container .button {
  -ms-flex-preferred-size: 100%;
      flex-basis: 100%;
}
@media only screen and (min-width: 1024px) {
  .find-dealer__button-container .button {
    -ms-flex-preferred-size: 50%;
        flex-basis: 50%;
  }
}
@media only screen and (max-width: 768px) {
  .find-dealer__button-container .button {
    -ms-flex-preferred-size: 50%;
        flex-basis: 50%;
  }
}
.find-dealer__button-container .button:first-child {
  padding-bottom: 0.5rem;
}
.find-dealer__button-container .button__label {
  white-space: nowrap;
}
.find-dealer__button-container .icon {
  margin-left: 0;
}
.find-dealer__container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: start;
      -ms-flex-align: start;
          align-items: flex-start;
  -ms-flex-flow: wrap;
      flex-flow: wrap;
}
.find-dealer__container .find-dealer__section {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-flow: wrap;
      flex-flow: wrap;
  -ms-flex-preferred-size: 50%;
      flex-basis: 50%;
  /* one item */
  /* two items */
}
.find-dealer__container .find-dealer__section:first-child:nth-last-child(1) {
  -ms-flex-preferred-size: 100%;
      flex-basis: 100%;
}
.find-dealer__container .find-dealer__section:first-child:nth-last-child(2) {
  -ms-flex-preferred-size: 50%;
      flex-basis: 50%;
}
.find-dealer__container .find-dealer__section .headline {
  width: 100%;
  line-height: 1;
  margin-bottom: 0.75rem;
}
@media only screen and (min-width: 768px) and (max-width: 1200px) {
  .find-dealer__container .find-dealer__section {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-flow: column;
            flex-flow: column;
    -ms-flex-preferred-size: auto;
        flex-basis: auto;
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .find-dealer__container .find-dealer__section:not(:first-child) {
    padding-top: 1rem;
  }
}
@media only screen and (max-width: 550px) {
  .find-dealer__container .find-dealer__section {
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-flow: column;
            flex-flow: column;
    -ms-flex-preferred-size: auto;
        flex-basis: auto;
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .find-dealer__container .find-dealer__section:not(:first-child) {
    padding-top: 1rem;
  }
}
.find-dealer .icon-button--find-dealer {
  margin: 0;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.footer {
  background-color: #4b4b4d;
  color: #fff;
  -webkit-box-flex: 0;
      -ms-flex: none;
          flex: none;
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .footer {
    /* stylelint-disable declaration-no-important */
    -ms-flex-negative: 0 !important;
        flex-shrink: 0 !important;
    -ms-flex-preferred-size: auto !important;
        flex-basis: auto !important;
    /* stylelint-enable declaration-no-important */
  }
}
@media only screen and (min-width: 550px) {
  .footer {
    padding: 0;
  }
}
@media only screen and (min-width: 550px) {
  .footer__subscribe {
    padding-top: 1.3333333333rem;
    padding-bottom: 2.1333333333rem;
  }
}
@media only screen and (min-width: 768px) {
  .footer__subscribe {
    padding-top: 3.3333333333rem;
    padding-bottom: 3.3333333333rem;
  }
}
@media only screen and (min-width: 1024px) {
  .footer__subscribe {
    padding-top: 5.1333333333rem;
    padding-bottom: 5.1333333333rem;
  }
}
@media only screen and (min-width: 550px) {
  .footer__logos {
    background-color: #fff;
    padding: 0.5rem 0 0;
    -webkit-box-shadow: 0 0.2rem 0.2rem 0, 0 1.2rem 1.2rem 0;
            box-shadow: 0 0.2rem 0.2rem 0, 0 1.2rem 1.2rem 0;
  }
}
@media only screen and (min-width: 768px) {
  .footer__logos {
    padding: 1.7333333333rem 0;
  }
}
.footer__navigation {
  padding: 0;
}
@media only screen and (min-width: 768px) {
  .footer__navigation {
    margin: 2.3333333333rem 2rem;
  }
  .footer__navigation .list__item {
    position: relative;
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .footer__navigation .list__item::before {
    content: ">";
    padding-right: 0.6666666667rem;
    color: #fff;
    position: absolute;
    line-height: 2;
  }
  .footer__navigation .navigation-list__element {
    display: inline-block;
    margin-left: 1rem;
    line-height: 2;
  }
}
.footer__contact-info-item {
  border-radius: 10px;
  -webkit-transition: color 250ms ease-in-out;
  transition: color 250ms ease-in-out;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  width: 100%;
  color: #6f6f6f;
  font-size: 0.9333333333rem;
  font-weight: 500;
  text-align: center;
  min-height: 4.6666666667rem;
}
@media only screen and (min-width: 768px) {
  .footer__contact-info-item {
    display: block;
    min-height: 0;
    border: none;
    font-size: 1rem;
    text-align: left;
  }
}
@media only screen and (min-width: 1024px) {
  .footer__contact-info-item {
    font-size: 1.2rem;
    line-height: 1.5333333333rem;
  }
}
@media only screen and (min-width: 768px) {
  .footer__phone {
    display: block;
    margin-bottom: 1rem;
    color: #929292;
  }
}
.footer__phone:hover, .footer__phone:focus {
  color: #b2b2b2;
}
.footer__social {
  width: 100%;
  margin-bottom: 1.5333333333rem;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  font-size: 1.0666666667rem;
  font-weight: bold;
  line-height: 1rem;
  color: #fff;
  letter-spacing: 0.036rem;
  text-align: center;
  text-transform: uppercase;
  padding-left: 0.6rem;
  padding-right: 0.6rem;
  padding-top: 2.6666666667rem;
}
.footer__social-icons {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  padding-top: 1rem;
  width: 100%;
}
.footer__social-icons .icon-button {
  margin: 0 0.5rem 1rem;
}
@media only screen and (min-width: 768px) {
  .footer__social {
    margin-bottom: 3.1333333333rem;
  }
}
.footer__quality {
  width: 100%;
  font-size: 1.0666666667rem;
  font-weight: bold;
  line-height: 1rem;
  color: #fff;
  letter-spacing: 0.036rem;
  border-top: 1px solid #fff;
  padding-top: 2.6666666667rem;
  text-align: center;
  text-transform: uppercase;
  padding-left: 0.6rem;
  padding-right: 0.6rem;
}
.footer__quality-text {
  font-size: 0.9333333333rem;
  font-weight: lighter;
  padding-top: 1.3333333333rem;
  padding-left: 0.6rem;
  padding-right: 0.6rem;
  text-align: center;
  text-transform: none;
}
@media only screen and (min-width: 768px) {
  .footer__quality {
    padding-top: 1.3333333333rem;
    padding-bottom: 2.1333333333rem;
    border-top: none;
  }
}
@media only screen and (min-width: 1024px) {
  .footer__quality {
    padding-top: 5.1333333333rem;
    padding-bottom: 5.1333333333rem;
    border: none;
    width: 50%;
  }
}
.footer__hint {
  font-size: 0.8rem;
  line-height: 1rem;
  text-align: center;
  color: #fff;
  letter-spacing: 0.036rem;
  padding: 1rem;
  border-top: 1px solid #6f6f6f;
}
@media only screen and (min-width: 550px) {
  .footer__hint {
    padding-left: 0.6rem;
    padding-right: 0.6rem;
  }
}
.footer__copyright {
  background-color: #fecc00;
}
.footer__copyright .container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  padding: 1.3333333333rem 1.3333333333rem 0;
  text-align: center;
  color: #4b4b4d;
  font-size: 0.9333333333rem;
}
.footer__copyright .container .terms {
  width: 100%;
}
@media only screen and (min-width: 768px) {
  .footer__copyright .container {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    text-align: initial;
    /* stylelint-disable-next-line max-nesting-depth */
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .footer__copyright .container .terms {
    width: auto;
  }
  .footer__copyright .container .privacy-navigation {
    width: auto;
  }
}
.footer .icon--facebook:hover {
  background-color: #3b5998;
}
.footer .icon--instagram:hover {
  background-color: #e1306c;
}
.footer .icon--linkedin:hover {
  background-color: #0077b5;
}
.footer .icon--youtube:hover {
  background-color: #c4302b;
}
.footer .icon--twitter:hover {
  background-color: #00acee;
}
.footer .icon--xing:hover {
  background-color: #126567;
}
.footer .icon--pinterest:hover {
  background-color: #c8232c;
}
.footer .internationalization {
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.footer__international-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  padding-bottom: 1rem;
}
@media only screen and (min-width: 768px) {
  .footer__international-container {
    display: none;
  }
}
.footer__international {
  font-weight: 700;
}
.footer .custom-element {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media only screen and (max-width: 767px) {
  .footer .custom-element {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
  }
}
.footer .country-selection__internationalization-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  background: none;
  padding: 0;
  color: #fff;
}
.footer .country-selection__internationalization-container .button {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  color: #fff;
  padding-top: 1rem;
  /* stylelint-disable-next-line max-nesting-depth */
}
.footer .country-selection__internationalization-container .button__label, .footer .country-selection__internationalization-container .button__label-container {
  width: 100%;
}
.footer .country-selection__container--show {
  -webkit-box-shadow: none;
          box-shadow: none;
}
.footer .country-selection__container--show .country-list__modal {
  color: #fff;
}
.footer .country-selection__container--show .link {
  color: #fff;
}
.footer .country-selection__container--show .link--is-active {
  color: #fecc00;
}
.footer .country-selection__container--show::before {
  content: none;
}
.footer .country-selection__container--show .country-selection__internationalization-container {
  background: none;
}

.footer .country-selection__container--show .country-list__modal,
.side-drawer .country-selection__container--show .country-list__modal {
  background: none;
  position: relative;
  -webkit-box-shadow: none;
          box-shadow: none;
  width: 100%;
  max-width: 80rem;
  margin: auto;
  padding: 1rem;
}
@media only screen and (min-width: 1024px) {
  .footer .country-selection__container--show .country-list__modal,
  .side-drawer .country-selection__container--show .country-list__modal {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-flow: row;
            flex-flow: row;
    padding: 1rem;
  }
}

.side-drawer .country-list__modal {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  color: #4b4b4d;
}
.side-drawer .country-list__modal .link {
  /* stylelint-disable-next-line max-nesting-depth */
}
.side-drawer .country-list__modal .link--is-active {
  color: #fecc00;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.inspiration-topic {
  margin: 4rem -0.1333333333rem 0;
}
.inspiration-topic__headline {
  padding: 0 0.5rem;
}
.inspiration-topic__content {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  justify-content: space-between;
  flex-wrap: wrap;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.internationalization {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.internationalization--stretch {
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  width: 100%;
}
.internationalization--stretch .button__label-container {
  display: none;
}
.internationalization--stretch .country-list__modal {
  display: none;
}
.internationalization--stretch .country-selection__container--show {
  -webkit-box-shadow: none;
          box-shadow: none;
}
.internationalization--stretch .country-selection__container--show::before {
  content: none;
}
.internationalization--stretch .country-selection__internationalization-container {
  padding: 0;
}
.internationalization--stretch--footer svg {
  fill: #fff;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.navigation-list-mobile {
  width: 100%;
  height: 100%;
}
.navigation-list-mobile__back-button {
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
}
.navigation-list-mobile__node-title {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  background-color: #4b4b4d;
  color: #fff;
  padding-left: 1rem;
  padding-right: 1rem;
  line-height: 3rem;
}
.navigation-list-mobile__node-title svg {
  fill: #fff;
}
.navigation-list-mobile__node-title--link {
  color: #fff;
}
.navigation-list-mobile__node-title--link:hover, .navigation-list-mobile__node-title--link:active, .navigation-list-mobile__node-title--link:focus {
  background: none;
  color: #fff;
}
.navigation-list-mobile__node-title--slvtec {
  background-color: #01a3ec;
}
.navigation-list-mobile__node-title .icon {
  margin-right: 0.5rem;
}
.navigation-list-mobile__node-title .icon svg {
  width: 1.3333333333rem;
  height: 1.3333333333rem;
}
.navigation-list-mobile__item-list {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  height: 100%;
}
.navigation-list-mobile__menu {
  background-color: #fff;
  color: #4b4b4d;
  -webkit-box-shadow: rgba(0, 0, 0, 0.2) 3px 0 2px -2px;
          box-shadow: rgba(0, 0, 0, 0.2) 3px 0 2px -2px;
  width: 100%;
  height: 100%;
}
.navigation-list-mobile__menu svg {
  fill: #4b4b4d;
}
.navigation-list-mobile__menu--lvl-0 {
  position: relative;
}
.navigation-list-mobile__menu--lvl-1 .navigation-list-mobile__node-title {
  text-transform: uppercase;
}
.navigation-list-mobile__menu--lvl-1 {
  -webkit-transition: left 250ms ease-in-out, visibility 250ms ease-in-out;
  transition: left 250ms ease-in-out, visibility 250ms ease-in-out;
  overflow: hidden;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  visibility: visible;
  top: 0;
  bottom: 0;
  position: absolute;
  left: 0;
}
.navigation-list-mobile__menu--lvl-1.is-hidden {
  visibility: hidden;
  display: block;
  left: -100%;
}
.navigation-list-mobile__menu--lvl-2 {
  -webkit-transition: left 250ms ease-in-out, visibility 250ms ease-in-out;
  transition: left 250ms ease-in-out, visibility 250ms ease-in-out;
  overflow: hidden;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  background-color: #ececec;
  visibility: visible;
  top: 0;
  bottom: 0;
  position: absolute;
  left: 0;
}
.navigation-list-mobile__menu--lvl-2.is-hidden {
  visibility: hidden;
  display: block;
  left: -100%;
}
.navigation-list-mobile__menu--lvl-3 {
  -webkit-transition: left 250ms ease-in-out, visibility 250ms ease-in-out;
  transition: left 250ms ease-in-out, visibility 250ms ease-in-out;
  overflow: hidden;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  background-color: #ececec;
  visibility: visible;
  top: 0;
  bottom: 0;
  position: absolute;
  left: 0;
}
.navigation-list-mobile__menu--lvl-3.is-hidden {
  visibility: hidden;
  display: block;
  left: -100%;
}
.navigation-list-mobile__menu--lvl-4 {
  -webkit-transition: left 250ms ease-in-out, visibility 250ms ease-in-out;
  transition: left 250ms ease-in-out, visibility 250ms ease-in-out;
  overflow: hidden;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  background-color: #ececec;
  visibility: visible;
  top: 0;
  bottom: 0;
  position: absolute;
  left: 0;
}
.navigation-list-mobile__menu--lvl-4.is-hidden {
  visibility: hidden;
  display: block;
  left: -100%;
}
.navigation-list-mobile__menu--lvl-5 {
  -webkit-transition: left 250ms ease-in-out, visibility 250ms ease-in-out;
  transition: left 250ms ease-in-out, visibility 250ms ease-in-out;
  overflow: hidden;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  background-color: #ececec;
  visibility: visible;
  top: 0;
  bottom: 0;
  position: absolute;
  left: 0;
}
.navigation-list-mobile__menu--lvl-5.is-hidden {
  visibility: hidden;
  display: block;
  left: -100%;
}
.navigation-list-mobile__menu--lvl-6 {
  -webkit-transition: left 250ms ease-in-out, visibility 250ms ease-in-out;
  transition: left 250ms ease-in-out, visibility 250ms ease-in-out;
  overflow: hidden;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  background-color: #ececec;
  visibility: visible;
  top: 0;
  bottom: 0;
  position: absolute;
  left: 0;
}
.navigation-list-mobile__menu--lvl-6.is-hidden {
  visibility: hidden;
  display: block;
  left: -100%;
}
.navigation-list-mobile__menu--lvl-7 {
  -webkit-transition: left 250ms ease-in-out, visibility 250ms ease-in-out;
  transition: left 250ms ease-in-out, visibility 250ms ease-in-out;
  overflow: hidden;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  background-color: #ececec;
  visibility: visible;
  top: 0;
  bottom: 0;
  position: absolute;
  left: 0;
}
.navigation-list-mobile__menu--lvl-7.is-hidden {
  visibility: hidden;
  display: block;
  left: -100%;
}
.navigation-list-mobile__menu--lvl-8 {
  -webkit-transition: left 250ms ease-in-out, visibility 250ms ease-in-out;
  transition: left 250ms ease-in-out, visibility 250ms ease-in-out;
  overflow: hidden;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  background-color: #ececec;
  visibility: visible;
  top: 0;
  bottom: 0;
  position: absolute;
  left: 0;
}
.navigation-list-mobile__menu--lvl-8.is-hidden {
  visibility: hidden;
  display: block;
  left: -100%;
}
.navigation-list-mobile__menu--lvl-9 {
  -webkit-transition: left 250ms ease-in-out, visibility 250ms ease-in-out;
  transition: left 250ms ease-in-out, visibility 250ms ease-in-out;
  overflow: hidden;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  background-color: #ececec;
  visibility: visible;
  top: 0;
  bottom: 0;
  position: absolute;
  left: 0;
}
.navigation-list-mobile__menu--lvl-9.is-hidden {
  visibility: hidden;
  display: block;
  left: -100%;
}
.navigation-list-mobile__menu--lvl-10 {
  -webkit-transition: left 250ms ease-in-out, visibility 250ms ease-in-out;
  transition: left 250ms ease-in-out, visibility 250ms ease-in-out;
  overflow: hidden;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  background-color: #ececec;
  visibility: visible;
  top: 0;
  bottom: 0;
  position: absolute;
  left: 0;
}
.navigation-list-mobile__menu--lvl-10.is-hidden {
  visibility: hidden;
  display: block;
  left: -100%;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.order-samples {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  border-top-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  margin-top: 1rem;
  padding-top: 1rem;
}
.order-samples__text-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  padding-left: 1.5rem;
}
.order-samples .icon--sample::before {
  font-size: 4rem;
  line-height: 1.1;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.order-sidebar__item {
  background-color: #ececec;
  color: #4b4b4d;
  margin-bottom: 1.3333333333rem;
  padding: 1rem 1rem 0.75rem;
  font-size: 0.9333333333rem;
  font-weight: 500;
  color: #4b4b4d;
}
.order-sidebar__item svg {
  fill: #4b4b4d;
}
.order-sidebar__item--summary {
  background-color: #ececec;
  color: #4b4b4d;
  margin-top: 1.3333333333rem;
  border-radius: 0;
  padding: 0;
}
.order-sidebar__item--summary svg {
  fill: #4b4b4d;
}
.order-sidebar__item--start, .order-sidebar__item--end {
  margin: 0;
}
.order-sidebar__item--end {
  border-radius: 0 0 10px 10px;
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
}
.order-sidebar__item--approve-request:last-of-type {
  margin-bottom: 1.3333333333rem;
}
.order-sidebar__item .label {
  display: none;
}
.order-sidebar__item--partner-request-offer .label {
  display: inline-block;
}
.order-sidebar__item .input,
.order-sidebar__item .textarea {
  font-size: 0.9333333333rem;
  font-weight: 400;
  line-height: 1rem;
  color: #4b4b4d;
  border: none;
  padding-top: 1rem;
  padding-bottom: 1rem;
}
.order-sidebar__item .textarea {
  min-height: 5.7333333333rem;
  line-height: 1.2rem;
  max-width: 100%;
  padding: 1.1333333333rem 1.3333333333rem 1.2rem;
  border-radius: 10px;
}
.order-sidebar__item .textarea::-webkit-input-placeholder {
  color: #b2b2b2;
}
.order-sidebar__item .textarea::-moz-placeholder {
  color: #b2b2b2;
}
.order-sidebar__item .textarea:-ms-input-placeholder {
  color: #b2b2b2;
}
.order-sidebar__item .textarea::-ms-input-placeholder {
  color: #b2b2b2;
}
.order-sidebar__item .textarea::placeholder {
  color: #b2b2b2;
}
.order-sidebar__item .custom-select .custom-select__select,
.order-sidebar__item .select2-container--default .select2-selection__rendered {
  border-radius: 10px;
  border: none;
  line-height: 3rem;
  background: #fff;
}
.order-sidebar__item .headline {
  line-height: 1.5;
}
.order-sidebar__title {
  font-size: 0.9333333333rem;
  line-height: 1.2rem;
  font-weight: 500;
}
.order-sidebar__title--space-bottom {
  margin-bottom: 0.5333333333rem;
}
.order-sidebar__text {
  font-weight: 400;
  letter-spacing: 0;
  font-size: 0.9333333333rem;
}
.order-sidebar__content {
  margin-top: 1rem;
}
.order-sidebar__content .form__actions {
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  text-align: left;
  margin-top: 0.5rem;
}
.order-sidebar__content .form__action {
  width: 100%;
  margin: 0;
}
@media only screen and (min-width: 768px) {
  .order-sidebar__content .form__action {
    width: 50%;
  }
}
@media only screen and (min-width: 1024px) {
  .order-sidebar__content .form__action {
    width: 100%;
  }
}
.order-sidebar__content .button {
  width: 100%;
}
@media only screen and (min-width: 768px) {
  .order-sidebar__content .button {
    width: 50%;
  }
}
@media only screen and (min-width: 1024px) {
  .order-sidebar__content .button {
    width: 100%;
  }
}
.order-sidebar .headline {
  font-size: 1rem;
  font-weight: 700;
  margin: 0;
}
.order-sidebar .button__label-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  width: 100%;
}
.order-sidebar .button__label {
  width: 100%;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.pdp-numinos-configurator {
  background-image: radial-gradient(at center center, #6f6f6f 28%, #4b4b4d 101%);
  margin-top: 1.6666666667rem;
  padding: 1.5rem 1rem;
  z-index: 2001;
}
.pdp-numinos-configurator__product-type {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
}
.pdp-numinos-configurator__product-type .icon {
  cursor: default;
}
.pdp-numinos-configurator__product-type .icon::before {
  font-size: 4rem;
}
.pdp-numinos-configurator__title, .pdp-numinos-configurator__text {
  color: #fff;
}
.pdp-numinos-configurator__title {
  font-weight: 700;
}
@media only screen and (min-width: 1024px) {
  .pdp-numinos-configurator .button {
    padding: 7.5px 7.5px 7.5px 1.4666666667rem;
    padding: 0.5rem 0.5rem 0.5rem 1.4666666667rem;
  }
  .pdp-numinos-configurator .button__icon-right {
    padding-left: 1.6666666667rem;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-listing-modal-window__product-listing-box-container:first-child {
  margin-top: 0;
}
.product-listing-modal-window__product-listing-box-container {
  margin-top: 1.5rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.reduced-top-header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -ms-flex-direction: nowrap;
      flex-direction: nowrap;
  padding: 0.5rem 1rem;
}
.reduced-top-header__logo {
  min-height: 3.3333333333rem;
}
.reduced-top-header .icon--logo {
  min-height: 3.3333333333rem;
  max-height: 3.3333333333rem;
  max-width: 8.3333333333rem;
  padding: 0.25rem;
}
.reduced-top-header__list-mobile {
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  overflow: hidden;
  text-align: center;
}
.reduced-top-header__list-desktop {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -ms-flex-item-align: center;
      align-self: center;
}
.reduced-top-header__list {
  min-height: 2.4666666667rem;
}
.reduced-top-header__list .usp-entry {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  margin-right: 1rem;
  margin-left: 1rem;
}
.reduced-top-header__list .icon {
  margin-right: 0.25rem;
}
.reduced-top-header__list .icon svg {
  width: 2rem;
  height: 2rem;
}
.reduced-top-header__list .icon svg {
  min-width: unset;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.action-card {
  padding: 1.5rem;
  height: 100%;
  width: 100%;
}
.action-card__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
.action-card__title {
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  margin-bottom: 20px;
}
.action-card__actions {
  -ms-flex-negative: 0;
      flex-shrink: 0;
}
.action-card__content {
  font-size: 15px;
  line-height: 22px;
}
.action-card--bg-gray-1 {
  background: #ececec;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.action-card-grid {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  margin: -0.5rem;
  width: calc(100% + 1rem);
}
@media only screen and (min-width: 768px) {
  .action-card-grid {
    -webkit-box-pack: end;
        -ms-flex-pack: end;
            justify-content: flex-end;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
  }
}
.action-card-grid__card {
  width: 100%;
  padding: 0.5rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.ajax-modal-window__content-container--has-error {
  text-align: center;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.back-row-button {
  width: 100%;
}
.back-row-button__button {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  background-color: #fff;
  color: #4b4b4d;
  cursor: pointer;
  padding-left: 1rem;
  padding-right: 1rem;
  width: 100%;
  line-height: 2rem;
}
.back-row-button__button svg {
  fill: #4b4b4d;
}
.back-row-button__caret {
  font-size: 1.3333333333rem;
  margin-right: 1rem;
}
.back-row-button__caret svg {
  width: 1.3333333333rem;
  height: 1.3333333333rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.banner {
  overflow: hidden;
  height: 13.3333333333rem;
  margin-bottom: 0.6666666667rem;
  background-color: #fecc00;
  background-position: center center;
  background-size: cover;
  background-repeat: no-repeat;
}
@media only screen and (min-width: 768px) {
  .banner {
    height: 30rem;
    margin-bottom: 2rem;
  }
}
.banner--medium {
  height: 26.6666666667rem;
}
.banner--small {
  height: 13.3333333333rem;
}
@media only screen and (min-width: 768px) {
  .banner--small {
    height: 22.6666666667rem;
  }
}
.banner--success {
  height: auto;
  margin-bottom: 1rem;
}
@media only screen and (min-width: 768px) {
  .banner--success {
    height: 30rem;
    margin-bottom: 2.6666666667rem;
  }
}
.banner--color-second {
  color: #fff;
}
.banner__container {
  min-height: 100%;
  text-align: center;
  position: relative;
  padding: 0 0.6666666667rem;
  margin: 0 1rem;
}
@media only screen and (min-width: 768px) {
  .banner__container {
    text-align: left;
  }
}
@media only screen and (min-width: 1024px) {
  .banner__container {
    padding: 0 2rem;
  }
}
.banner__container--success {
  margin: 0;
  padding: 1.3333333333rem 1rem 1.7333333333rem;
}
@media only screen and (min-width: 768px) {
  .banner__container--success {
    padding-top: 0;
    padding-bottom: 0;
  }
}
.banner__title, .banner__text {
  color: #fff;
}
.banner__title {
  font-size: 1.7333333333rem;
  line-height: 2rem;
  font-weight: 500;
  margin-bottom: 0.6666666667rem;
}
@media only screen and (min-width: 768px) {
  .banner__title {
    font-size: 2rem;
    line-height: 2rem;
    margin-bottom: 0.8666666667rem;
  }
}
.banner__text {
  font-size: 1.0666666667rem;
  line-height: normal;
  font-weight: 400;
  margin-bottom: 1.7333333333rem;
}
@media only screen and (min-width: 768px) {
  .banner__text {
    font-size: 1.2rem;
    margin-bottom: 2.3333333333rem;
  }
}
.banner__text--subtitle {
  font-family: "Lato", sans-serif;
  font-weight: 500;
}
@media only screen and (min-width: 768px) {
  .banner__text--subtitle {
    font-size: 2.5333333333rem;
    line-height: 2.6666666667rem;
  }
}
.banner__success-title {
  font-size: 2.1333333333rem;
  line-height: 2.2666666667rem;
  color: #fff;
  margin-bottom: 0.7333333333rem;
}
@media only screen and (min-width: 768px) {
  .banner__success-title {
    margin-bottom: 2.1333333333rem;
    font-size: 3.3333333333rem;
    line-height: 3.6666666667rem;
  }
}
.banner__success-text {
  font-size: 1.2rem;
  letter-spacing: 0.02rem;
}
@media only screen and (min-width: 768px) {
  .banner__success-text {
    font-size: 1.4666666667rem;
    letter-spacing: 0.0266666667rem;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.breadcrumb--progress {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
}
@media only screen and (min-width: 768px) {
  .breadcrumb--progress {
    padding: 1.0666666667rem 0;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.basic-form .headline {
  padding: 1rem 0;
  font-size: 2.4rem;
}
.basic-form__description {
  padding: 1rem 0;
}
.basic-form__headline-upload-data.headline, .basic-form__headline-personal-data.headline, .basic-form__headline-alternative-data.headline, .basic-form__headline-message.headline {
  padding: 3rem 0 0.5rem;
  font-size: 1.2rem;
  color: #4b4b4d;
}
.basic-form__vendor-data, .basic-form__newsletter {
  padding-top: 1rem;
}
.basic-form__tos {
  padding: 1rem 0;
}
.basic-form__check {
  width: 0 !important;
  height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
}
.basic-form__check * {
  width: 0 !important;
  height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  border: none;
}

.contact-lock-modal-window .modal-window__container {
  height: auto;
}

.contact-lock-modal-window__form-submit {
  margin-top: 0.75rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-align: start;
      -ms-flex-align: start;
          align-items: flex-start;
}
@media only screen and (max-width: 767px) {
  .contact-lock-modal-window__form-submit .button {
    -ms-flex-item-align: end;
        align-self: flex-end;
  }
}
@media only screen and (min-width: 768px) {
  .contact-lock-modal-window__form-submit {
    -webkit-box-align: start;
        -ms-flex-align: start;
            align-items: flex-start;
  }
}
.contact-lock-modal-window__form-submit .checkbox__container {
  -webkit-box-align: start;
      -ms-flex-align: start;
          align-items: flex-start;
  padding: 0.5rem 0;
}
.contact-lock-modal-window__data-container {
  display: grid;
  grid-template-columns: 1fr;
  grid-template-areas: "customerNumber" "company" "branch" "departmentPosition" "firstName" "lastName" "email" "tos";
  grid-gap: 1rem;
  margin-top: 0.75rem;
}
@media only screen and (min-width: 550px) {
  .contact-lock-modal-window__data-container {
    grid-template-columns: 1fr 1fr;
    grid-template-areas: "customerNumber company" "branch departmentPosition" "firstName lastName" "email tos";
  }
}
.contact-lock-modal-window__data-container .contact-lock-modal-window__customer-number {
  grid-area: customerNumber;
}
.contact-lock-modal-window__data-container .contact-lock-modal-window__company {
  grid-area: company;
}
.contact-lock-modal-window__data-container .contact-lock-modal-window__branch {
  grid-area: branch;
}
.contact-lock-modal-window__data-container .contact-lock-modal-window__department-position {
  grid-area: departmentPosition;
}
.contact-lock-modal-window__data-container .contact-lock-modal-window__first-name {
  grid-area: firstName;
}
.contact-lock-modal-window__data-container .contact-lock-modal-window__last-name {
  grid-area: lastName;
}
.contact-lock-modal-window__data-container .contact-lock-modal-window__email {
  grid-area: email;
}
.contact-lock-modal-window__data-container .contact-lock-modal-window__tos {
  grid-area: tos;
}
.contact-lock-modal-window__data-container .contact-lock-modal-window_space-1 {
  grid-area: space1;
}
.contact-lock-modal-window__data-container .contact-lock-modal-window_space-2 {
  grid-area: space2;
}
.contact-lock-modal-window .contact-lock-modal-window .headline {
  padding: 1rem 0;
  font-size: 2.4rem;
}
.contact-lock-modal-window .contact-lock-modal-window__description {
  padding: 1rem 0;
}
.contact-lock-modal-window .contact-lock-modal-window__headline-upload-data.headline, .contact-lock-modal-window .contact-lock-modal-window__headline-personal-data.headline, .contact-lock-modal-window .contact-lock-modal-window__headline-alternative-data.headline, .contact-lock-modal-window .contact-lock-modal-window__headline-message.headline {
  padding: 3rem 0 0.5rem;
  font-size: 1.2rem;
  color: #4b4b4d;
}
.contact-lock-modal-window .contact-lock-modal-window__vendor-data, .contact-lock-modal-window .contact-lock-modal-window__newsletter {
  padding-top: 1rem;
}
.contact-lock-modal-window .contact-lock-modal-window__tos {
  padding: 1rem 0;
}
.contact-lock-modal-window .contact-lock-modal-window__check {
  width: 0 !important;
  height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
}
.contact-lock-modal-window .contact-lock-modal-window__check * {
  width: 0 !important;
  height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  border: none;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.country-list__modal {
  display: none;
}
.country-list__modal-inner {
  position: relative;
}
.country-list__store-container, .country-list__international-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-flow: row wrap;
          flex-flow: row wrap;
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  -ms-flex-preferred-size: 100%;
      flex-basis: 100%;
}
.country-list__international-container {
  border-top-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  padding-top: 1rem;
  margin-top: 1rem;
}
.country-list__container-inner {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -ms-flex-preferred-size: calc(33.3333333333% - 1.5rem);
      flex-basis: calc(33.3333333333% - 1.5rem);
  margin-bottom: 1rem;
}
@media only screen and (min-width: 768px) {
  .country-list__container-inner:nth-child(3n+3), .country-list__container-inner:nth-child(3n+4) {
    margin-left: 1rem;
  }
}
.country-list__container-inner--international {
  -ms-flex-preferred-size: 100%;
      flex-basis: 100%;
}
.country-list__close-button {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
  width: 100%;
  position: absolute;
}
.country-list__country-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.country-list__country {
  width: 100%;
  padding-left: 1rem;
  line-height: 1.1;
}
.country-list__img {
  width: 3rem;
  max-width: unset;
  max-height: unset;
}
.country-list__image-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.country-list__image-headline {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -ms-flex-preferred-size: 100%;
      flex-basis: 100%;
  padding-bottom: 1rem;
}
.country-list__language-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-flow: row wrap;
          flex-flow: row wrap;
  padding-top: 0.25rem;
}
.country-list__language-select {
  line-height: 1.1;
  font-size: 0.9333333333rem;
}
.country-list__separator {
  padding: 0 0.5rem;
  line-height: 1.1;
}
.country-list__name {
  font-weight: 700;
  font-size: 0.9333333333rem;
}
.country-list--footer .country-list__container-inner, .country-list--country-select-page .country-list__container-inner {
  padding-left: 1rem;
  width: 100%;
  -ms-flex-preferred-size: 100%;
      flex-basis: 100%;
}
@media only screen and (min-width: 550px) {
  .country-list--footer .country-list__container-inner, .country-list--country-select-page .country-list__container-inner {
    width: 50%;
    -ms-flex-preferred-size: 50%;
        flex-basis: 50%;
  }
}
@media only screen and (min-width: 768px) {
  .country-list--footer .country-list__container-inner, .country-list--country-select-page .country-list__container-inner {
    -ms-flex-preferred-size: calc(33.3333333333% - 1.5rem);
        flex-basis: calc(33.3333333333% - 1.5rem);
    width: calc(33.3333333333% - 1.5rem);
  }
}
.country-list--footer {
  border-top-width: 1px;
  border-style: solid;
  border-color: #6f6f6f;
}
.country-list--footer .country-list__language-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-flow: row wrap;
          flex-flow: row wrap;
  padding-top: 0.5rem;
}
.country-list--footer::before {
  content: none;
}
.country-list--footer .country-list__international-container {
  border: none;
  padding: 0;
  margin: 0;
  -webkit-box-ordinal-group: 2;
      -ms-flex-order: 1;
          order: 1;
}
@media only screen and (min-width: 1024px) {
  .country-list--footer .country-list__international-container {
    -ms-flex-preferred-size: calc(33.3333333333% - 1.5rem);
        flex-basis: calc(33.3333333333% - 1.5rem);
  }
}
.country-list--footer .country-list__store-container {
  position: relative;
  padding-top: 1.5rem;
  margin-top: 1.5rem;
  -webkit-box-ordinal-group: 3;
      -ms-flex-order: 2;
          order: 2;
}
.country-list--footer .country-list__store-container::before {
  border-top: 1px solid #6f6f6f;
  position: absolute;
  content: "";
  width: 100vw;
  top: 0;
  left: -2rem;
}
@media only screen and (min-width: 1024px) {
  .country-list--footer .country-list__store-container {
    border: none;
    padding: 0;
    margin: 0 0 0 1.5rem;
    -ms-flex-preferred-size: 66.6666666667%;
        flex-basis: 66.6666666667%;
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .country-list--footer .country-list__store-container::before {
    content: none;
  }
}
.country-list--footer .country-list__container-inner {
  margin-left: 0;
}
.country-list--footer .country-list__container-inner--international {
  height: 100%;
}
.country-list--footer .country-list__container-inner--international .country-list__language-container {
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 1024px) {
  .country-list--footer .country-list__container-inner--international .country-list__language-container {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-flow: row wrap;
            flex-flow: row wrap;
  }
}
.country-list--country-select-page {
  height: 100%;
  margin: 1rem 0;
}
.country-list--country-select-page .country-list__modal {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  min-height: 40rem;
  background: #d0d0d0;
  padding: 3rem;
}
@media only screen and (min-width: 768px) {
  .country-list--country-select-page .country-list__modal {
    background: rgba(255, 255, 255, 0.9);
  }
}
.country-list--country-select-page .country-list__language-container {
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
}
.country-list--country-select-page .country-list__international-container {
  border: none;
}
.country-list--country-select-page .country-list__container-inner {
  padding-left: 0;
}
.country-list--country-select-page .country-list__store-container {
  min-height: 20rem;
}
.country-list--side-drawer {
  border-top: none;
}
.country-list--side-drawer.country-selection__container--show::before {
  content: none;
}
.country-list--side-drawer .country-list__container-inner {
  width: 100%;
  -ms-flex-preferred-size: 100%;
      flex-basis: 100%;
}
@media only screen and (min-width: 1024px) {
  .country-list--side-drawer .country-list__store-container {
    margin: 1.5rem 0 0 0;
    padding-top: 1.5rem;
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .country-list--side-drawer .country-list__store-container::before {
    content: "";
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.country-selection__container--show {
  display: block;
  -webkit-box-shadow: 0 0.2rem 0 0 #fff, 0 -0.2rem 0 0 #fff, 0.2rem 0 0.2rem 0 rgba(0, 0, 0, 0.2), -0.2rem 0 0.2rem 0 rgba(0, 0, 0, 0.2);
          box-shadow: 0 0.2rem 0 0 #fff, 0 -0.2rem 0 0 #fff, 0.2rem 0 0.2rem 0 rgba(0, 0, 0, 0.2), -0.2rem 0 0.2rem 0 rgba(0, 0, 0, 0.2);
  position: relative;
}
.country-selection__container--show::before {
  background-color: #fff;
  color: #4b4b4d;
  position: absolute;
  content: "";
  left: 0.6rem;
  right: 0.6rem;
  bottom: 0;
  text-decoration: none;
  border-bottom: 0.2rem solid #fecc00;
  z-index: 100;
}
.country-selection__container--show::before svg {
  fill: #4b4b4d;
}
.country-selection__container--show .country-list__modal {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  background-color: #fff;
  color: #4b4b4d;
  -webkit-box-shadow: 0 0 0.3333333333rem 0;
          box-shadow: 0 0 0.3333333333rem 0;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-flow: row wrap;
          flex-flow: row wrap;
  position: absolute;
  z-index: 9;
  right: 0;
  padding: 1.5rem;
  width: 48rem;
}
.country-selection__container--show .country-list__modal svg {
  fill: #4b4b4d;
}
.country-selection__container--show .country-selection__internationalization-container {
  background-color: #fff;
  color: #4b4b4d;
}
.country-selection__container--show .country-selection__internationalization-container svg {
  fill: #4b4b4d;
}
.country-selection__internationalization-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  position: relative;
  padding: 0 0.5rem;
  z-index: 10;
  line-height: 2.532;
}
.country-selection .button {
  padding: 0;
}
.country-selection .button .icon--international, .country-selection .button__icon-left-container {
  margin: 0;
}
.country-selection .button svg {
  fill: #fff;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.date-picker__container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  position: relative;
}
.date-picker__container[v-cloak] .icon {
  color: #b2b2b2;
}
.date-picker__container:not([v-cloak]) .icon {
  cursor: pointer;
  /* stylelint-disable-next-line max-nesting-depth */
}
.date-picker__container:not([v-cloak]) .icon:hover {
  color: #fecc00;
}
.date-picker input {
  width: 100%;
}
.date-picker .icon {
  position: absolute;
  font-size: 2rem;
  right: 0.5333333333rem;
}
.date-picker .vdp-datepicker__calendar {
  margin-left: auto;
  margin-right: auto;
  left: 0;
  right: 0;
  top: 30%;
  z-index: 500;
}
.date-picker .vdp-datepicker__calendar .cell:not(.disabled):not(.blank).day, .date-picker .vdp-datepicker__calendar .cell:not(.disabled):not(.blank).month, .date-picker .vdp-datepicker__calendar .cell:not(.disabled):not(.blank).year {
  /* stylelint-disable-next-line max-nesting-depth */
}
.date-picker .vdp-datepicker__calendar .cell:not(.disabled):not(.blank).day:hover, .date-picker .vdp-datepicker__calendar .cell:not(.disabled):not(.blank).month:hover, .date-picker .vdp-datepicker__calendar .cell:not(.disabled):not(.blank).year:hover {
  /* stylelint-disable-next-line declaration-no-important */
  border-color: #fecc00 !important;
}
.date-picker .vdp-datepicker__calendar .cell.selected {
  background-color: #fecc00;
}
.date-picker .vdp-datepicker__calendar .cell.selected:hover {
  background-color: #fecc00;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.downloads {
  width: 100%;
}
.downloads--configurator {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  background-color: #ececec;
  color: #4b4b4d;
  padding: 0.5rem 0;
}
.downloads--configurator svg {
  fill: #4b4b4d;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.editable-textarea textarea {
  border: 1px solid #d0d0d0;
  border-radius: 10px;
  color: #4b4b4d;
  padding: 0.9333333333rem 1.3333333333rem;
  font-size: 0.9333333333rem;
  width: 100%;
}
.editable-textarea button {
  margin-top: 1rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.energy-label {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
}
.energy-label svg {
  width: 2rem;
  height: 2rem;
}
.energy-label__eek-a {
  color: #afc70d;
}
.energy-label__eek-a1 {
  color: #58ab32;
}
.energy-label__eek-a2 {
  color: #019039;
}
.energy-label__eek-b {
  color: #fdea14;
}
.energy-label__eek-c {
  color: #fdcb00;
}
.energy-label__eek-d {
  color: #f19305;
}
.energy-label__eek-e {
  color: #e0071b;
}
.energy-label .icon--is-clickable {
  cursor: pointer;
}
.energy-label .icon {
  margin-right: 0.5rem;
}
.energy-label .icon:last-child {
  margin-right: 0;
}
.energy-label .data-sheet-link {
  padding-left: 0.6666666667rem;
  padding-right: 0.6666666667rem;
}
.energy-label__modal-window-1 {
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.energy-label__modal-window-1 .modal-window__container {
  max-width: 33.3333333333rem;
}
.energy-label__modal-window-1 .modal-window__content {
  -webkit-box-pack: normal;
      -ms-flex-pack: normal;
          justify-content: normal;
}
.energy-label__modal-window-1 .energy-label-info-text {
  font-size: 0.9333333333rem;
  text-align: center;
}
.energy-label__modal-window-2 {
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.energy-label__modal-window-2 .modal-window__container {
  max-width: 66.6666666667rem;
}
.energy-label__modal-window-2 .modal-window__content {
  -webkit-box-pack: normal;
      -ms-flex-pack: normal;
          justify-content: normal;
}
.energy-label__modal-window-2 .energy-label-info-text {
  font-size: 0.9333333333rem;
  text-align: center;
}
.energy-label__modal-window-3 {
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.energy-label__modal-window-3 .modal-window__container {
  max-width: 100rem;
}
.energy-label__modal-window-3 .modal-window__content {
  -webkit-box-pack: normal;
      -ms-flex-pack: normal;
          justify-content: normal;
}
.energy-label__modal-window-3 .energy-label-info-text {
  font-size: 0.9333333333rem;
  text-align: center;
}
.energy-label__modal-window-4 {
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.energy-label__modal-window-4 .modal-window__container {
  max-width: 133.3333333333rem;
}
.energy-label__modal-window-4 .modal-window__content {
  -webkit-box-pack: normal;
      -ms-flex-pack: normal;
          justify-content: normal;
}
.energy-label__modal-window-4 .energy-label-info-text {
  font-size: 0.9333333333rem;
  text-align: center;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.energy-label-image-slider {
  max-height: 100%;
}
.energy-label-image-slider__image {
  margin: 0 auto;
}
.energy-label-image-slider .keen-slider-carousel__container {
  max-height: 100%;
}
.energy-label-image-slider__slide {
  display: inherit;
  max-height: 100%;
}
@media only screen and (min-width: 1024px) {
  .energy-label-image-slider__container.keen-slider-carousel {
    display: initial;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.filter-category-accordion__icon {
  position: absolute;
  right: 0;
  top: 50%;
  -webkit-transform: translateY(-50%);
          transform: translateY(-50%);
  font-size: 1.3333333333rem;
}
.filter-category-accordion__item {
  position: relative;
  cursor: pointer;
  padding-right: 1rem;
}
.filter-category-accordion__item.active .filter-category-accordion__icon {
  -webkit-transform: translateY(-50%) rotate(180deg);
          transform: translateY(-50%) rotate(180deg);
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.google-map {
  height: 300px;
}
.google-map__kitchensink {
  height: 800px;
}
.google-map__find-dealer {
  height: 800px;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.graphic-scale {
  margin-bottom: 0.5rem;
}
.graphic-scale__container {
  position: relative;
  padding-top: 1rem;
  padding-bottom: 1rem;
  margin-left: 2rem;
  text-align: center;
}
.graphic-scale__line-on-ruler-base {
  border-bottom: 1px solid #000;
  margin: 0 auto;
  position: absolute;
  bottom: 0.5rem;
  -webkit-transition: all 1s ease-out;
  transition: all 1s ease-out;
}
.graphic-scale__line-on-ruler-small, .graphic-scale__line-on-ruler-big {
  border-left: 0.0666666667rem solid #000;
  position: absolute;
  width: 0;
  -webkit-transition: all 1s ease-out;
  transition: all 1s ease-out;
}
.graphic-scale__line-on-ruler-small label, .graphic-scale__line-on-ruler-big label {
  position: absolute;
  -webkit-transform: translateX(-50%);
          transform: translateX(-50%);
}
.graphic-scale__line-on-ruler-big {
  height: 0.5rem;
  bottom: 0;
}
.graphic-scale__line-on-ruler-small {
  bottom: 0.25rem;
  height: 0.25rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.icon-button {
  width: 3rem;
  height: 3rem;
  margin: 0 0.4333333333rem 0 0;
  background-color: rgba(255, 255, 255, 0);
  cursor: pointer;
  overflow: visible;
}
.icon-button--has-label {
  height: 3.3333333333rem;
}
@media only screen and (min-width: 550px) {
  .icon-button--has-label {
    height: inherit;
  }
}
.icon-button--has-label .icon::before {
  display: block;
}
.icon-button--has-label .label {
  position: relative;
  bottom: 0;
  font-weight: 400;
  line-height: 1.1;
}
.icon-button--technical {
  width: auto;
  height: auto;
}
.icon-button--technical .icon [class^=path],
.icon-button--technical .icon [class*=path] {
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.icon-button--technical .icon [class^=path]::before,
.icon-button--technical .icon [class*=path]::before {
  position: absolute;
}
@media only screen and (max-width: 1023px) {
  .icon-button--technical .icon [class^=path]::before,
  .icon-button--technical .icon [class*=path]::before {
    margin-left: -1rem;
  }
}
.icon-button__container {
  height: 100%;
  width: 100%;
  display: block;
  text-align: center;
}
.icon-button__icon-container {
  position: relative;
  width: 3rem;
  height: 3rem;
  margin: 0 auto;
}
.icon-button__icon, .icon-button__hover-icon {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-transition: opacity 250ms ease-in-out;
  transition: opacity 250ms ease-in-out;
  border-radius: 9999px;
  -webkit-transition: color 250ms ease-in-out, background-color 250ms ease-in-out;
  transition: color 250ms ease-in-out, background-color 250ms ease-in-out;
  font-size: 2rem;
  width: 3rem;
  height: 3rem;
  max-height: 3rem;
  line-height: 3rem;
  position: absolute;
}
.icon-button__icon--bg-text, .icon-button__hover-icon--bg-text {
  background-color: #4b4b4d;
}
.icon-button__icon--bg-text svg, .icon-button__hover-icon--bg-text svg {
  fill: #4b4b4d;
}
.icon-button__icon--bg-white, .icon-button__hover-icon--bg-white {
  background-color: #fff;
}
.icon-button__icon--bg-white svg, .icon-button__hover-icon--bg-white svg {
  fill: #fff;
}
.icon-button__icon--bg-main, .icon-button__hover-icon--bg-main {
  background-color: #fecc00;
}
.icon-button__icon--bg-main svg, .icon-button__hover-icon--bg-main svg {
  fill: #fecc00;
}
.icon-button__icon--bg-alt, .icon-button__hover-icon--bg-alt {
  background-color: #4b4b4d;
}
.icon-button__icon--bg-alt svg, .icon-button__hover-icon--bg-alt svg {
  fill: #4b4b4d;
}
.icon-button__icon--bg-dark, .icon-button__hover-icon--bg-dark {
  background-color: #1a171b;
}
.icon-button__icon--bg-dark svg, .icon-button__hover-icon--bg-dark svg {
  fill: #1a171b;
}
.icon-button__icon--bg-black, .icon-button__hover-icon--bg-black {
  background-color: #000;
}
.icon-button__icon--bg-black svg, .icon-button__hover-icon--bg-black svg {
  fill: #000;
}
.icon-button__icon--bg-transparent, .icon-button__hover-icon--bg-transparent {
  background-color: rgba(255, 255, 255, 0);
}
.icon-button__icon--bg-transparent svg, .icon-button__hover-icon--bg-transparent svg {
  fill: rgba(255, 255, 255, 0);
}
.icon-button__icon--bg-overlay, .icon-button__hover-icon--bg-overlay {
  background-color: rgba(255, 255, 255, 0.9);
}
.icon-button__icon--bg-overlay svg, .icon-button__hover-icon--bg-overlay svg {
  fill: rgba(255, 255, 255, 0.9);
}
.icon-button__icon--bg-controls-overlay, .icon-button__hover-icon--bg-controls-overlay {
  background-color: rgba(255, 255, 255, 0.6);
}
.icon-button__icon--bg-controls-overlay svg, .icon-button__hover-icon--bg-controls-overlay svg {
  fill: rgba(255, 255, 255, 0.6);
}
.icon-button__icon--bg-gray-1, .icon-button__hover-icon--bg-gray-1 {
  background-color: #ececec;
}
.icon-button__icon--bg-gray-1 svg, .icon-button__hover-icon--bg-gray-1 svg {
  fill: #ececec;
}
.icon-button__icon--bg-gray-2, .icon-button__hover-icon--bg-gray-2 {
  background-color: #d0d0d0;
}
.icon-button__icon--bg-gray-2 svg, .icon-button__hover-icon--bg-gray-2 svg {
  fill: #d0d0d0;
}
.icon-button__icon--bg-gray-3, .icon-button__hover-icon--bg-gray-3 {
  background-color: #b2b2b2;
}
.icon-button__icon--bg-gray-3 svg, .icon-button__hover-icon--bg-gray-3 svg {
  fill: #b2b2b2;
}
.icon-button__icon--bg-gray-4, .icon-button__hover-icon--bg-gray-4 {
  background-color: #929292;
}
.icon-button__icon--bg-gray-4 svg, .icon-button__hover-icon--bg-gray-4 svg {
  fill: #929292;
}
.icon-button__icon--bg-gray-5, .icon-button__hover-icon--bg-gray-5 {
  background-color: #6f6f6f;
}
.icon-button__icon--bg-gray-5 svg, .icon-button__hover-icon--bg-gray-5 svg {
  fill: #6f6f6f;
}
.icon-button__icon--bg-gray-6, .icon-button__hover-icon--bg-gray-6 {
  background-color: #4b4b4d;
}
.icon-button__icon--bg-gray-6 svg, .icon-button__hover-icon--bg-gray-6 svg {
  fill: #4b4b4d;
}
.icon-button__icon--bg-gray-7, .icon-button__hover-icon--bg-gray-7 {
  background-color: #1a171b;
}
.icon-button__icon--bg-gray-7 svg, .icon-button__hover-icon--bg-gray-7 svg {
  fill: #1a171b;
}
.icon-button__icon--bg-red-1, .icon-button__hover-icon--bg-red-1 {
  background-color: #e32213;
}
.icon-button__icon--bg-red-1 svg, .icon-button__hover-icon--bg-red-1 svg {
  fill: #e32213;
}
.icon-button__icon--bg-red-2, .icon-button__hover-icon--bg-red-2 {
  background-color: #e1306c;
}
.icon-button__icon--bg-red-2 svg, .icon-button__hover-icon--bg-red-2 svg {
  fill: #e1306c;
}
.icon-button__icon--bg-red-3, .icon-button__hover-icon--bg-red-3 {
  background-color: #dd1a16;
}
.icon-button__icon--bg-red-3 svg, .icon-button__hover-icon--bg-red-3 svg {
  fill: #dd1a16;
}
.icon-button__icon--bg-facebook, .icon-button__hover-icon--bg-facebook {
  background-color: #3b5998;
}
.icon-button__icon--bg-facebook svg, .icon-button__hover-icon--bg-facebook svg {
  fill: #3b5998;
}
.icon-button__icon--bg-twitter, .icon-button__hover-icon--bg-twitter {
  background-color: #0077b5;
}
.icon-button__icon--bg-twitter svg, .icon-button__hover-icon--bg-twitter svg {
  fill: #0077b5;
}
.icon-button__icon--bg-eek-a, .icon-button__hover-icon--bg-eek-a {
  background-color: #afc70d;
}
.icon-button__icon--bg-eek-a svg, .icon-button__hover-icon--bg-eek-a svg {
  fill: #afc70d;
}
.icon-button__icon--bg-eek-a1, .icon-button__hover-icon--bg-eek-a1 {
  background-color: #58ab32;
}
.icon-button__icon--bg-eek-a1 svg, .icon-button__hover-icon--bg-eek-a1 svg {
  fill: #58ab32;
}
.icon-button__icon--bg-eek-a2, .icon-button__hover-icon--bg-eek-a2 {
  background-color: #019039;
}
.icon-button__icon--bg-eek-a2 svg, .icon-button__hover-icon--bg-eek-a2 svg {
  fill: #019039;
}
.icon-button__icon--bg-eek-b, .icon-button__hover-icon--bg-eek-b {
  background-color: #fdea14;
}
.icon-button__icon--bg-eek-b svg, .icon-button__hover-icon--bg-eek-b svg {
  fill: #fdea14;
}
.icon-button__icon--bg-eek-c, .icon-button__hover-icon--bg-eek-c {
  background-color: #fdcb00;
}
.icon-button__icon--bg-eek-c svg, .icon-button__hover-icon--bg-eek-c svg {
  fill: #fdcb00;
}
.icon-button__icon--bg-eek-d, .icon-button__hover-icon--bg-eek-d {
  background-color: #f19305;
}
.icon-button__icon--bg-eek-d svg, .icon-button__hover-icon--bg-eek-d svg {
  fill: #f19305;
}
.icon-button__icon--bg-eek-e, .icon-button__hover-icon--bg-eek-e {
  background-color: #e0071b;
}
.icon-button__icon--bg-eek-e svg, .icon-button__hover-icon--bg-eek-e svg {
  fill: #e0071b;
}
.icon-button__icon--bg-hover-only-text:hover, .icon-button__hover-icon--bg-hover-only-text:hover {
  background-color: #4b4b4d;
}
.icon-button__icon--bg-hover-only-text:hover svg, .icon-button__hover-icon--bg-hover-only-text:hover svg {
  fill: #4b4b4d;
}
.icon-button__icon--bg-hover-only-white:hover, .icon-button__hover-icon--bg-hover-only-white:hover {
  background-color: #fff;
}
.icon-button__icon--bg-hover-only-white:hover svg, .icon-button__hover-icon--bg-hover-only-white:hover svg {
  fill: #fff;
}
.icon-button__icon--bg-hover-only-main:hover, .icon-button__hover-icon--bg-hover-only-main:hover {
  background-color: #fecc00;
}
.icon-button__icon--bg-hover-only-main:hover svg, .icon-button__hover-icon--bg-hover-only-main:hover svg {
  fill: #fecc00;
}
.icon-button__icon--bg-hover-only-alt:hover, .icon-button__hover-icon--bg-hover-only-alt:hover {
  background-color: #4b4b4d;
}
.icon-button__icon--bg-hover-only-alt:hover svg, .icon-button__hover-icon--bg-hover-only-alt:hover svg {
  fill: #4b4b4d;
}
.icon-button__icon--bg-hover-only-dark:hover, .icon-button__hover-icon--bg-hover-only-dark:hover {
  background-color: #1a171b;
}
.icon-button__icon--bg-hover-only-dark:hover svg, .icon-button__hover-icon--bg-hover-only-dark:hover svg {
  fill: #1a171b;
}
.icon-button__icon--bg-hover-only-black:hover, .icon-button__hover-icon--bg-hover-only-black:hover {
  background-color: #000;
}
.icon-button__icon--bg-hover-only-black:hover svg, .icon-button__hover-icon--bg-hover-only-black:hover svg {
  fill: #000;
}
.icon-button__icon--bg-hover-only-transparent:hover, .icon-button__hover-icon--bg-hover-only-transparent:hover {
  background-color: rgba(255, 255, 255, 0);
}
.icon-button__icon--bg-hover-only-transparent:hover svg, .icon-button__hover-icon--bg-hover-only-transparent:hover svg {
  fill: rgba(255, 255, 255, 0);
}
.icon-button__icon--bg-hover-only-overlay:hover, .icon-button__hover-icon--bg-hover-only-overlay:hover {
  background-color: rgba(255, 255, 255, 0.9);
}
.icon-button__icon--bg-hover-only-overlay:hover svg, .icon-button__hover-icon--bg-hover-only-overlay:hover svg {
  fill: rgba(255, 255, 255, 0.9);
}
.icon-button__icon--bg-hover-only-controls-overlay:hover, .icon-button__hover-icon--bg-hover-only-controls-overlay:hover {
  background-color: rgba(255, 255, 255, 0.6);
}
.icon-button__icon--bg-hover-only-controls-overlay:hover svg, .icon-button__hover-icon--bg-hover-only-controls-overlay:hover svg {
  fill: rgba(255, 255, 255, 0.6);
}
.icon-button__icon--bg-hover-only-gray-1:hover, .icon-button__hover-icon--bg-hover-only-gray-1:hover {
  background-color: #ececec;
}
.icon-button__icon--bg-hover-only-gray-1:hover svg, .icon-button__hover-icon--bg-hover-only-gray-1:hover svg {
  fill: #ececec;
}
.icon-button__icon--bg-hover-only-gray-2:hover, .icon-button__hover-icon--bg-hover-only-gray-2:hover {
  background-color: #d0d0d0;
}
.icon-button__icon--bg-hover-only-gray-2:hover svg, .icon-button__hover-icon--bg-hover-only-gray-2:hover svg {
  fill: #d0d0d0;
}
.icon-button__icon--bg-hover-only-gray-3:hover, .icon-button__hover-icon--bg-hover-only-gray-3:hover {
  background-color: #b2b2b2;
}
.icon-button__icon--bg-hover-only-gray-3:hover svg, .icon-button__hover-icon--bg-hover-only-gray-3:hover svg {
  fill: #b2b2b2;
}
.icon-button__icon--bg-hover-only-gray-4:hover, .icon-button__hover-icon--bg-hover-only-gray-4:hover {
  background-color: #929292;
}
.icon-button__icon--bg-hover-only-gray-4:hover svg, .icon-button__hover-icon--bg-hover-only-gray-4:hover svg {
  fill: #929292;
}
.icon-button__icon--bg-hover-only-gray-5:hover, .icon-button__hover-icon--bg-hover-only-gray-5:hover {
  background-color: #6f6f6f;
}
.icon-button__icon--bg-hover-only-gray-5:hover svg, .icon-button__hover-icon--bg-hover-only-gray-5:hover svg {
  fill: #6f6f6f;
}
.icon-button__icon--bg-hover-only-gray-6:hover, .icon-button__hover-icon--bg-hover-only-gray-6:hover {
  background-color: #4b4b4d;
}
.icon-button__icon--bg-hover-only-gray-6:hover svg, .icon-button__hover-icon--bg-hover-only-gray-6:hover svg {
  fill: #4b4b4d;
}
.icon-button__icon--bg-hover-only-gray-7:hover, .icon-button__hover-icon--bg-hover-only-gray-7:hover {
  background-color: #1a171b;
}
.icon-button__icon--bg-hover-only-gray-7:hover svg, .icon-button__hover-icon--bg-hover-only-gray-7:hover svg {
  fill: #1a171b;
}
.icon-button__icon--bg-hover-only-red-1:hover, .icon-button__hover-icon--bg-hover-only-red-1:hover {
  background-color: #e32213;
}
.icon-button__icon--bg-hover-only-red-1:hover svg, .icon-button__hover-icon--bg-hover-only-red-1:hover svg {
  fill: #e32213;
}
.icon-button__icon--bg-hover-only-red-2:hover, .icon-button__hover-icon--bg-hover-only-red-2:hover {
  background-color: #e1306c;
}
.icon-button__icon--bg-hover-only-red-2:hover svg, .icon-button__hover-icon--bg-hover-only-red-2:hover svg {
  fill: #e1306c;
}
.icon-button__icon--bg-hover-only-red-3:hover, .icon-button__hover-icon--bg-hover-only-red-3:hover {
  background-color: #dd1a16;
}
.icon-button__icon--bg-hover-only-red-3:hover svg, .icon-button__hover-icon--bg-hover-only-red-3:hover svg {
  fill: #dd1a16;
}
.icon-button__icon--bg-hover-only-facebook:hover, .icon-button__hover-icon--bg-hover-only-facebook:hover {
  background-color: #3b5998;
}
.icon-button__icon--bg-hover-only-facebook:hover svg, .icon-button__hover-icon--bg-hover-only-facebook:hover svg {
  fill: #3b5998;
}
.icon-button__icon--bg-hover-only-twitter:hover, .icon-button__hover-icon--bg-hover-only-twitter:hover {
  background-color: #0077b5;
}
.icon-button__icon--bg-hover-only-twitter:hover svg, .icon-button__hover-icon--bg-hover-only-twitter:hover svg {
  fill: #0077b5;
}
.icon-button__icon--bg-hover-only-eek-a:hover, .icon-button__hover-icon--bg-hover-only-eek-a:hover {
  background-color: #afc70d;
}
.icon-button__icon--bg-hover-only-eek-a:hover svg, .icon-button__hover-icon--bg-hover-only-eek-a:hover svg {
  fill: #afc70d;
}
.icon-button__icon--bg-hover-only-eek-a1:hover, .icon-button__hover-icon--bg-hover-only-eek-a1:hover {
  background-color: #58ab32;
}
.icon-button__icon--bg-hover-only-eek-a1:hover svg, .icon-button__hover-icon--bg-hover-only-eek-a1:hover svg {
  fill: #58ab32;
}
.icon-button__icon--bg-hover-only-eek-a2:hover, .icon-button__hover-icon--bg-hover-only-eek-a2:hover {
  background-color: #019039;
}
.icon-button__icon--bg-hover-only-eek-a2:hover svg, .icon-button__hover-icon--bg-hover-only-eek-a2:hover svg {
  fill: #019039;
}
.icon-button__icon--bg-hover-only-eek-b:hover, .icon-button__hover-icon--bg-hover-only-eek-b:hover {
  background-color: #fdea14;
}
.icon-button__icon--bg-hover-only-eek-b:hover svg, .icon-button__hover-icon--bg-hover-only-eek-b:hover svg {
  fill: #fdea14;
}
.icon-button__icon--bg-hover-only-eek-c:hover, .icon-button__hover-icon--bg-hover-only-eek-c:hover {
  background-color: #fdcb00;
}
.icon-button__icon--bg-hover-only-eek-c:hover svg, .icon-button__hover-icon--bg-hover-only-eek-c:hover svg {
  fill: #fdcb00;
}
.icon-button__icon--bg-hover-only-eek-d:hover, .icon-button__hover-icon--bg-hover-only-eek-d:hover {
  background-color: #f19305;
}
.icon-button__icon--bg-hover-only-eek-d:hover svg, .icon-button__hover-icon--bg-hover-only-eek-d:hover svg {
  fill: #f19305;
}
.icon-button__icon--bg-hover-only-eek-e:hover, .icon-button__hover-icon--bg-hover-only-eek-e:hover {
  background-color: #e0071b;
}
.icon-button__icon--bg-hover-only-eek-e:hover svg, .icon-button__hover-icon--bg-hover-only-eek-e:hover svg {
  fill: #e0071b;
}
.icon-button__icon--bg-hover-text:hover, .icon-button__icon--bg-hover-text:focus, .icon-button__hover-icon--bg-hover-text:hover, .icon-button__hover-icon--bg-hover-text:focus {
  background-color: #4b4b4d;
}
.icon-button__icon--bg-hover-text:hover svg, .icon-button__icon--bg-hover-text:focus svg, .icon-button__hover-icon--bg-hover-text:hover svg, .icon-button__hover-icon--bg-hover-text:focus svg {
  fill: #4b4b4d;
}
.icon-button__icon--bg-hover-white:hover, .icon-button__icon--bg-hover-white:focus, .icon-button__hover-icon--bg-hover-white:hover, .icon-button__hover-icon--bg-hover-white:focus {
  background-color: #fff;
}
.icon-button__icon--bg-hover-white:hover svg, .icon-button__icon--bg-hover-white:focus svg, .icon-button__hover-icon--bg-hover-white:hover svg, .icon-button__hover-icon--bg-hover-white:focus svg {
  fill: #fff;
}
.icon-button__icon--bg-hover-main:hover, .icon-button__icon--bg-hover-main:focus, .icon-button__hover-icon--bg-hover-main:hover, .icon-button__hover-icon--bg-hover-main:focus {
  background-color: #fecc00;
}
.icon-button__icon--bg-hover-main:hover svg, .icon-button__icon--bg-hover-main:focus svg, .icon-button__hover-icon--bg-hover-main:hover svg, .icon-button__hover-icon--bg-hover-main:focus svg {
  fill: #fecc00;
}
.icon-button__icon--bg-hover-alt:hover, .icon-button__icon--bg-hover-alt:focus, .icon-button__hover-icon--bg-hover-alt:hover, .icon-button__hover-icon--bg-hover-alt:focus {
  background-color: #4b4b4d;
}
.icon-button__icon--bg-hover-alt:hover svg, .icon-button__icon--bg-hover-alt:focus svg, .icon-button__hover-icon--bg-hover-alt:hover svg, .icon-button__hover-icon--bg-hover-alt:focus svg {
  fill: #4b4b4d;
}
.icon-button__icon--bg-hover-dark:hover, .icon-button__icon--bg-hover-dark:focus, .icon-button__hover-icon--bg-hover-dark:hover, .icon-button__hover-icon--bg-hover-dark:focus {
  background-color: #1a171b;
}
.icon-button__icon--bg-hover-dark:hover svg, .icon-button__icon--bg-hover-dark:focus svg, .icon-button__hover-icon--bg-hover-dark:hover svg, .icon-button__hover-icon--bg-hover-dark:focus svg {
  fill: #1a171b;
}
.icon-button__icon--bg-hover-black:hover, .icon-button__icon--bg-hover-black:focus, .icon-button__hover-icon--bg-hover-black:hover, .icon-button__hover-icon--bg-hover-black:focus {
  background-color: #000;
}
.icon-button__icon--bg-hover-black:hover svg, .icon-button__icon--bg-hover-black:focus svg, .icon-button__hover-icon--bg-hover-black:hover svg, .icon-button__hover-icon--bg-hover-black:focus svg {
  fill: #000;
}
.icon-button__icon--bg-hover-transparent:hover, .icon-button__icon--bg-hover-transparent:focus, .icon-button__hover-icon--bg-hover-transparent:hover, .icon-button__hover-icon--bg-hover-transparent:focus {
  background-color: rgba(255, 255, 255, 0);
}
.icon-button__icon--bg-hover-transparent:hover svg, .icon-button__icon--bg-hover-transparent:focus svg, .icon-button__hover-icon--bg-hover-transparent:hover svg, .icon-button__hover-icon--bg-hover-transparent:focus svg {
  fill: rgba(255, 255, 255, 0);
}
.icon-button__icon--bg-hover-overlay:hover, .icon-button__icon--bg-hover-overlay:focus, .icon-button__hover-icon--bg-hover-overlay:hover, .icon-button__hover-icon--bg-hover-overlay:focus {
  background-color: rgba(255, 255, 255, 0.9);
}
.icon-button__icon--bg-hover-overlay:hover svg, .icon-button__icon--bg-hover-overlay:focus svg, .icon-button__hover-icon--bg-hover-overlay:hover svg, .icon-button__hover-icon--bg-hover-overlay:focus svg {
  fill: rgba(255, 255, 255, 0.9);
}
.icon-button__icon--bg-hover-controls-overlay:hover, .icon-button__icon--bg-hover-controls-overlay:focus, .icon-button__hover-icon--bg-hover-controls-overlay:hover, .icon-button__hover-icon--bg-hover-controls-overlay:focus {
  background-color: rgba(255, 255, 255, 0.6);
}
.icon-button__icon--bg-hover-controls-overlay:hover svg, .icon-button__icon--bg-hover-controls-overlay:focus svg, .icon-button__hover-icon--bg-hover-controls-overlay:hover svg, .icon-button__hover-icon--bg-hover-controls-overlay:focus svg {
  fill: rgba(255, 255, 255, 0.6);
}
.icon-button__icon--bg-hover-gray-1:hover, .icon-button__icon--bg-hover-gray-1:focus, .icon-button__hover-icon--bg-hover-gray-1:hover, .icon-button__hover-icon--bg-hover-gray-1:focus {
  background-color: #ececec;
}
.icon-button__icon--bg-hover-gray-1:hover svg, .icon-button__icon--bg-hover-gray-1:focus svg, .icon-button__hover-icon--bg-hover-gray-1:hover svg, .icon-button__hover-icon--bg-hover-gray-1:focus svg {
  fill: #ececec;
}
.icon-button__icon--bg-hover-gray-2:hover, .icon-button__icon--bg-hover-gray-2:focus, .icon-button__hover-icon--bg-hover-gray-2:hover, .icon-button__hover-icon--bg-hover-gray-2:focus {
  background-color: #d0d0d0;
}
.icon-button__icon--bg-hover-gray-2:hover svg, .icon-button__icon--bg-hover-gray-2:focus svg, .icon-button__hover-icon--bg-hover-gray-2:hover svg, .icon-button__hover-icon--bg-hover-gray-2:focus svg {
  fill: #d0d0d0;
}
.icon-button__icon--bg-hover-gray-3:hover, .icon-button__icon--bg-hover-gray-3:focus, .icon-button__hover-icon--bg-hover-gray-3:hover, .icon-button__hover-icon--bg-hover-gray-3:focus {
  background-color: #b2b2b2;
}
.icon-button__icon--bg-hover-gray-3:hover svg, .icon-button__icon--bg-hover-gray-3:focus svg, .icon-button__hover-icon--bg-hover-gray-3:hover svg, .icon-button__hover-icon--bg-hover-gray-3:focus svg {
  fill: #b2b2b2;
}
.icon-button__icon--bg-hover-gray-4:hover, .icon-button__icon--bg-hover-gray-4:focus, .icon-button__hover-icon--bg-hover-gray-4:hover, .icon-button__hover-icon--bg-hover-gray-4:focus {
  background-color: #929292;
}
.icon-button__icon--bg-hover-gray-4:hover svg, .icon-button__icon--bg-hover-gray-4:focus svg, .icon-button__hover-icon--bg-hover-gray-4:hover svg, .icon-button__hover-icon--bg-hover-gray-4:focus svg {
  fill: #929292;
}
.icon-button__icon--bg-hover-gray-5:hover, .icon-button__icon--bg-hover-gray-5:focus, .icon-button__hover-icon--bg-hover-gray-5:hover, .icon-button__hover-icon--bg-hover-gray-5:focus {
  background-color: #6f6f6f;
}
.icon-button__icon--bg-hover-gray-5:hover svg, .icon-button__icon--bg-hover-gray-5:focus svg, .icon-button__hover-icon--bg-hover-gray-5:hover svg, .icon-button__hover-icon--bg-hover-gray-5:focus svg {
  fill: #6f6f6f;
}
.icon-button__icon--bg-hover-gray-6:hover, .icon-button__icon--bg-hover-gray-6:focus, .icon-button__hover-icon--bg-hover-gray-6:hover, .icon-button__hover-icon--bg-hover-gray-6:focus {
  background-color: #4b4b4d;
}
.icon-button__icon--bg-hover-gray-6:hover svg, .icon-button__icon--bg-hover-gray-6:focus svg, .icon-button__hover-icon--bg-hover-gray-6:hover svg, .icon-button__hover-icon--bg-hover-gray-6:focus svg {
  fill: #4b4b4d;
}
.icon-button__icon--bg-hover-gray-7:hover, .icon-button__icon--bg-hover-gray-7:focus, .icon-button__hover-icon--bg-hover-gray-7:hover, .icon-button__hover-icon--bg-hover-gray-7:focus {
  background-color: #1a171b;
}
.icon-button__icon--bg-hover-gray-7:hover svg, .icon-button__icon--bg-hover-gray-7:focus svg, .icon-button__hover-icon--bg-hover-gray-7:hover svg, .icon-button__hover-icon--bg-hover-gray-7:focus svg {
  fill: #1a171b;
}
.icon-button__icon--bg-hover-red-1:hover, .icon-button__icon--bg-hover-red-1:focus, .icon-button__hover-icon--bg-hover-red-1:hover, .icon-button__hover-icon--bg-hover-red-1:focus {
  background-color: #e32213;
}
.icon-button__icon--bg-hover-red-1:hover svg, .icon-button__icon--bg-hover-red-1:focus svg, .icon-button__hover-icon--bg-hover-red-1:hover svg, .icon-button__hover-icon--bg-hover-red-1:focus svg {
  fill: #e32213;
}
.icon-button__icon--bg-hover-red-2:hover, .icon-button__icon--bg-hover-red-2:focus, .icon-button__hover-icon--bg-hover-red-2:hover, .icon-button__hover-icon--bg-hover-red-2:focus {
  background-color: #e1306c;
}
.icon-button__icon--bg-hover-red-2:hover svg, .icon-button__icon--bg-hover-red-2:focus svg, .icon-button__hover-icon--bg-hover-red-2:hover svg, .icon-button__hover-icon--bg-hover-red-2:focus svg {
  fill: #e1306c;
}
.icon-button__icon--bg-hover-red-3:hover, .icon-button__icon--bg-hover-red-3:focus, .icon-button__hover-icon--bg-hover-red-3:hover, .icon-button__hover-icon--bg-hover-red-3:focus {
  background-color: #dd1a16;
}
.icon-button__icon--bg-hover-red-3:hover svg, .icon-button__icon--bg-hover-red-3:focus svg, .icon-button__hover-icon--bg-hover-red-3:hover svg, .icon-button__hover-icon--bg-hover-red-3:focus svg {
  fill: #dd1a16;
}
.icon-button__icon--bg-hover-facebook:hover, .icon-button__icon--bg-hover-facebook:focus, .icon-button__hover-icon--bg-hover-facebook:hover, .icon-button__hover-icon--bg-hover-facebook:focus {
  background-color: #3b5998;
}
.icon-button__icon--bg-hover-facebook:hover svg, .icon-button__icon--bg-hover-facebook:focus svg, .icon-button__hover-icon--bg-hover-facebook:hover svg, .icon-button__hover-icon--bg-hover-facebook:focus svg {
  fill: #3b5998;
}
.icon-button__icon--bg-hover-twitter:hover, .icon-button__icon--bg-hover-twitter:focus, .icon-button__hover-icon--bg-hover-twitter:hover, .icon-button__hover-icon--bg-hover-twitter:focus {
  background-color: #0077b5;
}
.icon-button__icon--bg-hover-twitter:hover svg, .icon-button__icon--bg-hover-twitter:focus svg, .icon-button__hover-icon--bg-hover-twitter:hover svg, .icon-button__hover-icon--bg-hover-twitter:focus svg {
  fill: #0077b5;
}
.icon-button__icon--bg-hover-eek-a:hover, .icon-button__icon--bg-hover-eek-a:focus, .icon-button__hover-icon--bg-hover-eek-a:hover, .icon-button__hover-icon--bg-hover-eek-a:focus {
  background-color: #afc70d;
}
.icon-button__icon--bg-hover-eek-a:hover svg, .icon-button__icon--bg-hover-eek-a:focus svg, .icon-button__hover-icon--bg-hover-eek-a:hover svg, .icon-button__hover-icon--bg-hover-eek-a:focus svg {
  fill: #afc70d;
}
.icon-button__icon--bg-hover-eek-a1:hover, .icon-button__icon--bg-hover-eek-a1:focus, .icon-button__hover-icon--bg-hover-eek-a1:hover, .icon-button__hover-icon--bg-hover-eek-a1:focus {
  background-color: #58ab32;
}
.icon-button__icon--bg-hover-eek-a1:hover svg, .icon-button__icon--bg-hover-eek-a1:focus svg, .icon-button__hover-icon--bg-hover-eek-a1:hover svg, .icon-button__hover-icon--bg-hover-eek-a1:focus svg {
  fill: #58ab32;
}
.icon-button__icon--bg-hover-eek-a2:hover, .icon-button__icon--bg-hover-eek-a2:focus, .icon-button__hover-icon--bg-hover-eek-a2:hover, .icon-button__hover-icon--bg-hover-eek-a2:focus {
  background-color: #019039;
}
.icon-button__icon--bg-hover-eek-a2:hover svg, .icon-button__icon--bg-hover-eek-a2:focus svg, .icon-button__hover-icon--bg-hover-eek-a2:hover svg, .icon-button__hover-icon--bg-hover-eek-a2:focus svg {
  fill: #019039;
}
.icon-button__icon--bg-hover-eek-b:hover, .icon-button__icon--bg-hover-eek-b:focus, .icon-button__hover-icon--bg-hover-eek-b:hover, .icon-button__hover-icon--bg-hover-eek-b:focus {
  background-color: #fdea14;
}
.icon-button__icon--bg-hover-eek-b:hover svg, .icon-button__icon--bg-hover-eek-b:focus svg, .icon-button__hover-icon--bg-hover-eek-b:hover svg, .icon-button__hover-icon--bg-hover-eek-b:focus svg {
  fill: #fdea14;
}
.icon-button__icon--bg-hover-eek-c:hover, .icon-button__icon--bg-hover-eek-c:focus, .icon-button__hover-icon--bg-hover-eek-c:hover, .icon-button__hover-icon--bg-hover-eek-c:focus {
  background-color: #fdcb00;
}
.icon-button__icon--bg-hover-eek-c:hover svg, .icon-button__icon--bg-hover-eek-c:focus svg, .icon-button__hover-icon--bg-hover-eek-c:hover svg, .icon-button__hover-icon--bg-hover-eek-c:focus svg {
  fill: #fdcb00;
}
.icon-button__icon--bg-hover-eek-d:hover, .icon-button__icon--bg-hover-eek-d:focus, .icon-button__hover-icon--bg-hover-eek-d:hover, .icon-button__hover-icon--bg-hover-eek-d:focus {
  background-color: #f19305;
}
.icon-button__icon--bg-hover-eek-d:hover svg, .icon-button__icon--bg-hover-eek-d:focus svg, .icon-button__hover-icon--bg-hover-eek-d:hover svg, .icon-button__hover-icon--bg-hover-eek-d:focus svg {
  fill: #f19305;
}
.icon-button__icon--bg-hover-eek-e:hover, .icon-button__icon--bg-hover-eek-e:focus, .icon-button__hover-icon--bg-hover-eek-e:hover, .icon-button__hover-icon--bg-hover-eek-e:focus {
  background-color: #e0071b;
}
.icon-button__icon--bg-hover-eek-e:hover svg, .icon-button__icon--bg-hover-eek-e:focus svg, .icon-button__hover-icon--bg-hover-eek-e:hover svg, .icon-button__hover-icon--bg-hover-eek-e:focus svg {
  fill: #e0071b;
}
.icon-button__icon--color-text, .icon-button__hover-icon--color-text {
  color: #4b4b4d;
}
.icon-button__icon--color-text svg, .icon-button__hover-icon--color-text svg {
  fill: #4b4b4d;
}
.icon-button__icon--color-white, .icon-button__hover-icon--color-white {
  color: #fff;
}
.icon-button__icon--color-white svg, .icon-button__hover-icon--color-white svg {
  fill: #fff;
}
.icon-button__icon--color-main, .icon-button__hover-icon--color-main {
  color: #fecc00;
}
.icon-button__icon--color-main svg, .icon-button__hover-icon--color-main svg {
  fill: #fecc00;
}
.icon-button__icon--color-alt, .icon-button__hover-icon--color-alt {
  color: #4b4b4d;
}
.icon-button__icon--color-alt svg, .icon-button__hover-icon--color-alt svg {
  fill: #4b4b4d;
}
.icon-button__icon--color-dark, .icon-button__hover-icon--color-dark {
  color: #1a171b;
}
.icon-button__icon--color-dark svg, .icon-button__hover-icon--color-dark svg {
  fill: #1a171b;
}
.icon-button__icon--color-black, .icon-button__hover-icon--color-black {
  color: #000;
}
.icon-button__icon--color-black svg, .icon-button__hover-icon--color-black svg {
  fill: #000;
}
.icon-button__icon--color-transparent, .icon-button__hover-icon--color-transparent {
  color: rgba(255, 255, 255, 0);
}
.icon-button__icon--color-transparent svg, .icon-button__hover-icon--color-transparent svg {
  fill: rgba(255, 255, 255, 0);
}
.icon-button__icon--color-overlay, .icon-button__hover-icon--color-overlay {
  color: rgba(255, 255, 255, 0.9);
}
.icon-button__icon--color-overlay svg, .icon-button__hover-icon--color-overlay svg {
  fill: rgba(255, 255, 255, 0.9);
}
.icon-button__icon--color-controls-overlay, .icon-button__hover-icon--color-controls-overlay {
  color: rgba(255, 255, 255, 0.6);
}
.icon-button__icon--color-controls-overlay svg, .icon-button__hover-icon--color-controls-overlay svg {
  fill: rgba(255, 255, 255, 0.6);
}
.icon-button__icon--color-gray-1, .icon-button__hover-icon--color-gray-1 {
  color: #ececec;
}
.icon-button__icon--color-gray-1 svg, .icon-button__hover-icon--color-gray-1 svg {
  fill: #ececec;
}
.icon-button__icon--color-gray-2, .icon-button__hover-icon--color-gray-2 {
  color: #d0d0d0;
}
.icon-button__icon--color-gray-2 svg, .icon-button__hover-icon--color-gray-2 svg {
  fill: #d0d0d0;
}
.icon-button__icon--color-gray-3, .icon-button__hover-icon--color-gray-3 {
  color: #b2b2b2;
}
.icon-button__icon--color-gray-3 svg, .icon-button__hover-icon--color-gray-3 svg {
  fill: #b2b2b2;
}
.icon-button__icon--color-gray-4, .icon-button__hover-icon--color-gray-4 {
  color: #929292;
}
.icon-button__icon--color-gray-4 svg, .icon-button__hover-icon--color-gray-4 svg {
  fill: #929292;
}
.icon-button__icon--color-gray-5, .icon-button__hover-icon--color-gray-5 {
  color: #6f6f6f;
}
.icon-button__icon--color-gray-5 svg, .icon-button__hover-icon--color-gray-5 svg {
  fill: #6f6f6f;
}
.icon-button__icon--color-gray-6, .icon-button__hover-icon--color-gray-6 {
  color: #4b4b4d;
}
.icon-button__icon--color-gray-6 svg, .icon-button__hover-icon--color-gray-6 svg {
  fill: #4b4b4d;
}
.icon-button__icon--color-gray-7, .icon-button__hover-icon--color-gray-7 {
  color: #1a171b;
}
.icon-button__icon--color-gray-7 svg, .icon-button__hover-icon--color-gray-7 svg {
  fill: #1a171b;
}
.icon-button__icon--color-red-1, .icon-button__hover-icon--color-red-1 {
  color: #e32213;
}
.icon-button__icon--color-red-1 svg, .icon-button__hover-icon--color-red-1 svg {
  fill: #e32213;
}
.icon-button__icon--color-red-2, .icon-button__hover-icon--color-red-2 {
  color: #e1306c;
}
.icon-button__icon--color-red-2 svg, .icon-button__hover-icon--color-red-2 svg {
  fill: #e1306c;
}
.icon-button__icon--color-red-3, .icon-button__hover-icon--color-red-3 {
  color: #dd1a16;
}
.icon-button__icon--color-red-3 svg, .icon-button__hover-icon--color-red-3 svg {
  fill: #dd1a16;
}
.icon-button__icon--color-facebook, .icon-button__hover-icon--color-facebook {
  color: #3b5998;
}
.icon-button__icon--color-facebook svg, .icon-button__hover-icon--color-facebook svg {
  fill: #3b5998;
}
.icon-button__icon--color-twitter, .icon-button__hover-icon--color-twitter {
  color: #0077b5;
}
.icon-button__icon--color-twitter svg, .icon-button__hover-icon--color-twitter svg {
  fill: #0077b5;
}
.icon-button__icon--color-eek-a, .icon-button__hover-icon--color-eek-a {
  color: #afc70d;
}
.icon-button__icon--color-eek-a svg, .icon-button__hover-icon--color-eek-a svg {
  fill: #afc70d;
}
.icon-button__icon--color-eek-a1, .icon-button__hover-icon--color-eek-a1 {
  color: #58ab32;
}
.icon-button__icon--color-eek-a1 svg, .icon-button__hover-icon--color-eek-a1 svg {
  fill: #58ab32;
}
.icon-button__icon--color-eek-a2, .icon-button__hover-icon--color-eek-a2 {
  color: #019039;
}
.icon-button__icon--color-eek-a2 svg, .icon-button__hover-icon--color-eek-a2 svg {
  fill: #019039;
}
.icon-button__icon--color-eek-b, .icon-button__hover-icon--color-eek-b {
  color: #fdea14;
}
.icon-button__icon--color-eek-b svg, .icon-button__hover-icon--color-eek-b svg {
  fill: #fdea14;
}
.icon-button__icon--color-eek-c, .icon-button__hover-icon--color-eek-c {
  color: #fdcb00;
}
.icon-button__icon--color-eek-c svg, .icon-button__hover-icon--color-eek-c svg {
  fill: #fdcb00;
}
.icon-button__icon--color-eek-d, .icon-button__hover-icon--color-eek-d {
  color: #f19305;
}
.icon-button__icon--color-eek-d svg, .icon-button__hover-icon--color-eek-d svg {
  fill: #f19305;
}
.icon-button__icon--color-eek-e, .icon-button__hover-icon--color-eek-e {
  color: #e0071b;
}
.icon-button__icon--color-eek-e svg, .icon-button__hover-icon--color-eek-e svg {
  fill: #e0071b;
}
.icon-button__icon--color-hover-only-text:hover, .icon-button__hover-icon--color-hover-only-text:hover {
  color: #4b4b4d;
}
.icon-button__icon--color-hover-only-text:hover svg, .icon-button__hover-icon--color-hover-only-text:hover svg {
  fill: #4b4b4d;
}
.icon-button__icon--color-hover-only-white:hover, .icon-button__hover-icon--color-hover-only-white:hover {
  color: #fff;
}
.icon-button__icon--color-hover-only-white:hover svg, .icon-button__hover-icon--color-hover-only-white:hover svg {
  fill: #fff;
}
.icon-button__icon--color-hover-only-main:hover, .icon-button__hover-icon--color-hover-only-main:hover {
  color: #fecc00;
}
.icon-button__icon--color-hover-only-main:hover svg, .icon-button__hover-icon--color-hover-only-main:hover svg {
  fill: #fecc00;
}
.icon-button__icon--color-hover-only-alt:hover, .icon-button__hover-icon--color-hover-only-alt:hover {
  color: #4b4b4d;
}
.icon-button__icon--color-hover-only-alt:hover svg, .icon-button__hover-icon--color-hover-only-alt:hover svg {
  fill: #4b4b4d;
}
.icon-button__icon--color-hover-only-dark:hover, .icon-button__hover-icon--color-hover-only-dark:hover {
  color: #1a171b;
}
.icon-button__icon--color-hover-only-dark:hover svg, .icon-button__hover-icon--color-hover-only-dark:hover svg {
  fill: #1a171b;
}
.icon-button__icon--color-hover-only-black:hover, .icon-button__hover-icon--color-hover-only-black:hover {
  color: #000;
}
.icon-button__icon--color-hover-only-black:hover svg, .icon-button__hover-icon--color-hover-only-black:hover svg {
  fill: #000;
}
.icon-button__icon--color-hover-only-transparent:hover, .icon-button__hover-icon--color-hover-only-transparent:hover {
  color: rgba(255, 255, 255, 0);
}
.icon-button__icon--color-hover-only-transparent:hover svg, .icon-button__hover-icon--color-hover-only-transparent:hover svg {
  fill: rgba(255, 255, 255, 0);
}
.icon-button__icon--color-hover-only-overlay:hover, .icon-button__hover-icon--color-hover-only-overlay:hover {
  color: rgba(255, 255, 255, 0.9);
}
.icon-button__icon--color-hover-only-overlay:hover svg, .icon-button__hover-icon--color-hover-only-overlay:hover svg {
  fill: rgba(255, 255, 255, 0.9);
}
.icon-button__icon--color-hover-only-controls-overlay:hover, .icon-button__hover-icon--color-hover-only-controls-overlay:hover {
  color: rgba(255, 255, 255, 0.6);
}
.icon-button__icon--color-hover-only-controls-overlay:hover svg, .icon-button__hover-icon--color-hover-only-controls-overlay:hover svg {
  fill: rgba(255, 255, 255, 0.6);
}
.icon-button__icon--color-hover-only-gray-1:hover, .icon-button__hover-icon--color-hover-only-gray-1:hover {
  color: #ececec;
}
.icon-button__icon--color-hover-only-gray-1:hover svg, .icon-button__hover-icon--color-hover-only-gray-1:hover svg {
  fill: #ececec;
}
.icon-button__icon--color-hover-only-gray-2:hover, .icon-button__hover-icon--color-hover-only-gray-2:hover {
  color: #d0d0d0;
}
.icon-button__icon--color-hover-only-gray-2:hover svg, .icon-button__hover-icon--color-hover-only-gray-2:hover svg {
  fill: #d0d0d0;
}
.icon-button__icon--color-hover-only-gray-3:hover, .icon-button__hover-icon--color-hover-only-gray-3:hover {
  color: #b2b2b2;
}
.icon-button__icon--color-hover-only-gray-3:hover svg, .icon-button__hover-icon--color-hover-only-gray-3:hover svg {
  fill: #b2b2b2;
}
.icon-button__icon--color-hover-only-gray-4:hover, .icon-button__hover-icon--color-hover-only-gray-4:hover {
  color: #929292;
}
.icon-button__icon--color-hover-only-gray-4:hover svg, .icon-button__hover-icon--color-hover-only-gray-4:hover svg {
  fill: #929292;
}
.icon-button__icon--color-hover-only-gray-5:hover, .icon-button__hover-icon--color-hover-only-gray-5:hover {
  color: #6f6f6f;
}
.icon-button__icon--color-hover-only-gray-5:hover svg, .icon-button__hover-icon--color-hover-only-gray-5:hover svg {
  fill: #6f6f6f;
}
.icon-button__icon--color-hover-only-gray-6:hover, .icon-button__hover-icon--color-hover-only-gray-6:hover {
  color: #4b4b4d;
}
.icon-button__icon--color-hover-only-gray-6:hover svg, .icon-button__hover-icon--color-hover-only-gray-6:hover svg {
  fill: #4b4b4d;
}
.icon-button__icon--color-hover-only-gray-7:hover, .icon-button__hover-icon--color-hover-only-gray-7:hover {
  color: #1a171b;
}
.icon-button__icon--color-hover-only-gray-7:hover svg, .icon-button__hover-icon--color-hover-only-gray-7:hover svg {
  fill: #1a171b;
}
.icon-button__icon--color-hover-only-red-1:hover, .icon-button__hover-icon--color-hover-only-red-1:hover {
  color: #e32213;
}
.icon-button__icon--color-hover-only-red-1:hover svg, .icon-button__hover-icon--color-hover-only-red-1:hover svg {
  fill: #e32213;
}
.icon-button__icon--color-hover-only-red-2:hover, .icon-button__hover-icon--color-hover-only-red-2:hover {
  color: #e1306c;
}
.icon-button__icon--color-hover-only-red-2:hover svg, .icon-button__hover-icon--color-hover-only-red-2:hover svg {
  fill: #e1306c;
}
.icon-button__icon--color-hover-only-red-3:hover, .icon-button__hover-icon--color-hover-only-red-3:hover {
  color: #dd1a16;
}
.icon-button__icon--color-hover-only-red-3:hover svg, .icon-button__hover-icon--color-hover-only-red-3:hover svg {
  fill: #dd1a16;
}
.icon-button__icon--color-hover-only-facebook:hover, .icon-button__hover-icon--color-hover-only-facebook:hover {
  color: #3b5998;
}
.icon-button__icon--color-hover-only-facebook:hover svg, .icon-button__hover-icon--color-hover-only-facebook:hover svg {
  fill: #3b5998;
}
.icon-button__icon--color-hover-only-twitter:hover, .icon-button__hover-icon--color-hover-only-twitter:hover {
  color: #0077b5;
}
.icon-button__icon--color-hover-only-twitter:hover svg, .icon-button__hover-icon--color-hover-only-twitter:hover svg {
  fill: #0077b5;
}
.icon-button__icon--color-hover-only-eek-a:hover, .icon-button__hover-icon--color-hover-only-eek-a:hover {
  color: #afc70d;
}
.icon-button__icon--color-hover-only-eek-a:hover svg, .icon-button__hover-icon--color-hover-only-eek-a:hover svg {
  fill: #afc70d;
}
.icon-button__icon--color-hover-only-eek-a1:hover, .icon-button__hover-icon--color-hover-only-eek-a1:hover {
  color: #58ab32;
}
.icon-button__icon--color-hover-only-eek-a1:hover svg, .icon-button__hover-icon--color-hover-only-eek-a1:hover svg {
  fill: #58ab32;
}
.icon-button__icon--color-hover-only-eek-a2:hover, .icon-button__hover-icon--color-hover-only-eek-a2:hover {
  color: #019039;
}
.icon-button__icon--color-hover-only-eek-a2:hover svg, .icon-button__hover-icon--color-hover-only-eek-a2:hover svg {
  fill: #019039;
}
.icon-button__icon--color-hover-only-eek-b:hover, .icon-button__hover-icon--color-hover-only-eek-b:hover {
  color: #fdea14;
}
.icon-button__icon--color-hover-only-eek-b:hover svg, .icon-button__hover-icon--color-hover-only-eek-b:hover svg {
  fill: #fdea14;
}
.icon-button__icon--color-hover-only-eek-c:hover, .icon-button__hover-icon--color-hover-only-eek-c:hover {
  color: #fdcb00;
}
.icon-button__icon--color-hover-only-eek-c:hover svg, .icon-button__hover-icon--color-hover-only-eek-c:hover svg {
  fill: #fdcb00;
}
.icon-button__icon--color-hover-only-eek-d:hover, .icon-button__hover-icon--color-hover-only-eek-d:hover {
  color: #f19305;
}
.icon-button__icon--color-hover-only-eek-d:hover svg, .icon-button__hover-icon--color-hover-only-eek-d:hover svg {
  fill: #f19305;
}
.icon-button__icon--color-hover-only-eek-e:hover, .icon-button__hover-icon--color-hover-only-eek-e:hover {
  color: #e0071b;
}
.icon-button__icon--color-hover-only-eek-e:hover svg, .icon-button__hover-icon--color-hover-only-eek-e:hover svg {
  fill: #e0071b;
}
.icon-button__icon--color-hover-text:hover, .icon-button__icon--color-hover-text:focus, .icon-button__hover-icon--color-hover-text:hover, .icon-button__hover-icon--color-hover-text:focus {
  color: #4b4b4d;
}
.icon-button__icon--color-hover-text:hover svg, .icon-button__icon--color-hover-text:focus svg, .icon-button__hover-icon--color-hover-text:hover svg, .icon-button__hover-icon--color-hover-text:focus svg {
  fill: #4b4b4d;
}
.icon-button__icon--color-hover-white:hover, .icon-button__icon--color-hover-white:focus, .icon-button__hover-icon--color-hover-white:hover, .icon-button__hover-icon--color-hover-white:focus {
  color: #fff;
}
.icon-button__icon--color-hover-white:hover svg, .icon-button__icon--color-hover-white:focus svg, .icon-button__hover-icon--color-hover-white:hover svg, .icon-button__hover-icon--color-hover-white:focus svg {
  fill: #fff;
}
.icon-button__icon--color-hover-main:hover, .icon-button__icon--color-hover-main:focus, .icon-button__hover-icon--color-hover-main:hover, .icon-button__hover-icon--color-hover-main:focus {
  color: #fecc00;
}
.icon-button__icon--color-hover-main:hover svg, .icon-button__icon--color-hover-main:focus svg, .icon-button__hover-icon--color-hover-main:hover svg, .icon-button__hover-icon--color-hover-main:focus svg {
  fill: #fecc00;
}
.icon-button__icon--color-hover-alt:hover, .icon-button__icon--color-hover-alt:focus, .icon-button__hover-icon--color-hover-alt:hover, .icon-button__hover-icon--color-hover-alt:focus {
  color: #4b4b4d;
}
.icon-button__icon--color-hover-alt:hover svg, .icon-button__icon--color-hover-alt:focus svg, .icon-button__hover-icon--color-hover-alt:hover svg, .icon-button__hover-icon--color-hover-alt:focus svg {
  fill: #4b4b4d;
}
.icon-button__icon--color-hover-dark:hover, .icon-button__icon--color-hover-dark:focus, .icon-button__hover-icon--color-hover-dark:hover, .icon-button__hover-icon--color-hover-dark:focus {
  color: #1a171b;
}
.icon-button__icon--color-hover-dark:hover svg, .icon-button__icon--color-hover-dark:focus svg, .icon-button__hover-icon--color-hover-dark:hover svg, .icon-button__hover-icon--color-hover-dark:focus svg {
  fill: #1a171b;
}
.icon-button__icon--color-hover-black:hover, .icon-button__icon--color-hover-black:focus, .icon-button__hover-icon--color-hover-black:hover, .icon-button__hover-icon--color-hover-black:focus {
  color: #000;
}
.icon-button__icon--color-hover-black:hover svg, .icon-button__icon--color-hover-black:focus svg, .icon-button__hover-icon--color-hover-black:hover svg, .icon-button__hover-icon--color-hover-black:focus svg {
  fill: #000;
}
.icon-button__icon--color-hover-transparent:hover, .icon-button__icon--color-hover-transparent:focus, .icon-button__hover-icon--color-hover-transparent:hover, .icon-button__hover-icon--color-hover-transparent:focus {
  color: rgba(255, 255, 255, 0);
}
.icon-button__icon--color-hover-transparent:hover svg, .icon-button__icon--color-hover-transparent:focus svg, .icon-button__hover-icon--color-hover-transparent:hover svg, .icon-button__hover-icon--color-hover-transparent:focus svg {
  fill: rgba(255, 255, 255, 0);
}
.icon-button__icon--color-hover-overlay:hover, .icon-button__icon--color-hover-overlay:focus, .icon-button__hover-icon--color-hover-overlay:hover, .icon-button__hover-icon--color-hover-overlay:focus {
  color: rgba(255, 255, 255, 0.9);
}
.icon-button__icon--color-hover-overlay:hover svg, .icon-button__icon--color-hover-overlay:focus svg, .icon-button__hover-icon--color-hover-overlay:hover svg, .icon-button__hover-icon--color-hover-overlay:focus svg {
  fill: rgba(255, 255, 255, 0.9);
}
.icon-button__icon--color-hover-controls-overlay:hover, .icon-button__icon--color-hover-controls-overlay:focus, .icon-button__hover-icon--color-hover-controls-overlay:hover, .icon-button__hover-icon--color-hover-controls-overlay:focus {
  color: rgba(255, 255, 255, 0.6);
}
.icon-button__icon--color-hover-controls-overlay:hover svg, .icon-button__icon--color-hover-controls-overlay:focus svg, .icon-button__hover-icon--color-hover-controls-overlay:hover svg, .icon-button__hover-icon--color-hover-controls-overlay:focus svg {
  fill: rgba(255, 255, 255, 0.6);
}
.icon-button__icon--color-hover-gray-1:hover, .icon-button__icon--color-hover-gray-1:focus, .icon-button__hover-icon--color-hover-gray-1:hover, .icon-button__hover-icon--color-hover-gray-1:focus {
  color: #ececec;
}
.icon-button__icon--color-hover-gray-1:hover svg, .icon-button__icon--color-hover-gray-1:focus svg, .icon-button__hover-icon--color-hover-gray-1:hover svg, .icon-button__hover-icon--color-hover-gray-1:focus svg {
  fill: #ececec;
}
.icon-button__icon--color-hover-gray-2:hover, .icon-button__icon--color-hover-gray-2:focus, .icon-button__hover-icon--color-hover-gray-2:hover, .icon-button__hover-icon--color-hover-gray-2:focus {
  color: #d0d0d0;
}
.icon-button__icon--color-hover-gray-2:hover svg, .icon-button__icon--color-hover-gray-2:focus svg, .icon-button__hover-icon--color-hover-gray-2:hover svg, .icon-button__hover-icon--color-hover-gray-2:focus svg {
  fill: #d0d0d0;
}
.icon-button__icon--color-hover-gray-3:hover, .icon-button__icon--color-hover-gray-3:focus, .icon-button__hover-icon--color-hover-gray-3:hover, .icon-button__hover-icon--color-hover-gray-3:focus {
  color: #b2b2b2;
}
.icon-button__icon--color-hover-gray-3:hover svg, .icon-button__icon--color-hover-gray-3:focus svg, .icon-button__hover-icon--color-hover-gray-3:hover svg, .icon-button__hover-icon--color-hover-gray-3:focus svg {
  fill: #b2b2b2;
}
.icon-button__icon--color-hover-gray-4:hover, .icon-button__icon--color-hover-gray-4:focus, .icon-button__hover-icon--color-hover-gray-4:hover, .icon-button__hover-icon--color-hover-gray-4:focus {
  color: #929292;
}
.icon-button__icon--color-hover-gray-4:hover svg, .icon-button__icon--color-hover-gray-4:focus svg, .icon-button__hover-icon--color-hover-gray-4:hover svg, .icon-button__hover-icon--color-hover-gray-4:focus svg {
  fill: #929292;
}
.icon-button__icon--color-hover-gray-5:hover, .icon-button__icon--color-hover-gray-5:focus, .icon-button__hover-icon--color-hover-gray-5:hover, .icon-button__hover-icon--color-hover-gray-5:focus {
  color: #6f6f6f;
}
.icon-button__icon--color-hover-gray-5:hover svg, .icon-button__icon--color-hover-gray-5:focus svg, .icon-button__hover-icon--color-hover-gray-5:hover svg, .icon-button__hover-icon--color-hover-gray-5:focus svg {
  fill: #6f6f6f;
}
.icon-button__icon--color-hover-gray-6:hover, .icon-button__icon--color-hover-gray-6:focus, .icon-button__hover-icon--color-hover-gray-6:hover, .icon-button__hover-icon--color-hover-gray-6:focus {
  color: #4b4b4d;
}
.icon-button__icon--color-hover-gray-6:hover svg, .icon-button__icon--color-hover-gray-6:focus svg, .icon-button__hover-icon--color-hover-gray-6:hover svg, .icon-button__hover-icon--color-hover-gray-6:focus svg {
  fill: #4b4b4d;
}
.icon-button__icon--color-hover-gray-7:hover, .icon-button__icon--color-hover-gray-7:focus, .icon-button__hover-icon--color-hover-gray-7:hover, .icon-button__hover-icon--color-hover-gray-7:focus {
  color: #1a171b;
}
.icon-button__icon--color-hover-gray-7:hover svg, .icon-button__icon--color-hover-gray-7:focus svg, .icon-button__hover-icon--color-hover-gray-7:hover svg, .icon-button__hover-icon--color-hover-gray-7:focus svg {
  fill: #1a171b;
}
.icon-button__icon--color-hover-red-1:hover, .icon-button__icon--color-hover-red-1:focus, .icon-button__hover-icon--color-hover-red-1:hover, .icon-button__hover-icon--color-hover-red-1:focus {
  color: #e32213;
}
.icon-button__icon--color-hover-red-1:hover svg, .icon-button__icon--color-hover-red-1:focus svg, .icon-button__hover-icon--color-hover-red-1:hover svg, .icon-button__hover-icon--color-hover-red-1:focus svg {
  fill: #e32213;
}
.icon-button__icon--color-hover-red-2:hover, .icon-button__icon--color-hover-red-2:focus, .icon-button__hover-icon--color-hover-red-2:hover, .icon-button__hover-icon--color-hover-red-2:focus {
  color: #e1306c;
}
.icon-button__icon--color-hover-red-2:hover svg, .icon-button__icon--color-hover-red-2:focus svg, .icon-button__hover-icon--color-hover-red-2:hover svg, .icon-button__hover-icon--color-hover-red-2:focus svg {
  fill: #e1306c;
}
.icon-button__icon--color-hover-red-3:hover, .icon-button__icon--color-hover-red-3:focus, .icon-button__hover-icon--color-hover-red-3:hover, .icon-button__hover-icon--color-hover-red-3:focus {
  color: #dd1a16;
}
.icon-button__icon--color-hover-red-3:hover svg, .icon-button__icon--color-hover-red-3:focus svg, .icon-button__hover-icon--color-hover-red-3:hover svg, .icon-button__hover-icon--color-hover-red-3:focus svg {
  fill: #dd1a16;
}
.icon-button__icon--color-hover-facebook:hover, .icon-button__icon--color-hover-facebook:focus, .icon-button__hover-icon--color-hover-facebook:hover, .icon-button__hover-icon--color-hover-facebook:focus {
  color: #3b5998;
}
.icon-button__icon--color-hover-facebook:hover svg, .icon-button__icon--color-hover-facebook:focus svg, .icon-button__hover-icon--color-hover-facebook:hover svg, .icon-button__hover-icon--color-hover-facebook:focus svg {
  fill: #3b5998;
}
.icon-button__icon--color-hover-twitter:hover, .icon-button__icon--color-hover-twitter:focus, .icon-button__hover-icon--color-hover-twitter:hover, .icon-button__hover-icon--color-hover-twitter:focus {
  color: #0077b5;
}
.icon-button__icon--color-hover-twitter:hover svg, .icon-button__icon--color-hover-twitter:focus svg, .icon-button__hover-icon--color-hover-twitter:hover svg, .icon-button__hover-icon--color-hover-twitter:focus svg {
  fill: #0077b5;
}
.icon-button__icon--color-hover-eek-a:hover, .icon-button__icon--color-hover-eek-a:focus, .icon-button__hover-icon--color-hover-eek-a:hover, .icon-button__hover-icon--color-hover-eek-a:focus {
  color: #afc70d;
}
.icon-button__icon--color-hover-eek-a:hover svg, .icon-button__icon--color-hover-eek-a:focus svg, .icon-button__hover-icon--color-hover-eek-a:hover svg, .icon-button__hover-icon--color-hover-eek-a:focus svg {
  fill: #afc70d;
}
.icon-button__icon--color-hover-eek-a1:hover, .icon-button__icon--color-hover-eek-a1:focus, .icon-button__hover-icon--color-hover-eek-a1:hover, .icon-button__hover-icon--color-hover-eek-a1:focus {
  color: #58ab32;
}
.icon-button__icon--color-hover-eek-a1:hover svg, .icon-button__icon--color-hover-eek-a1:focus svg, .icon-button__hover-icon--color-hover-eek-a1:hover svg, .icon-button__hover-icon--color-hover-eek-a1:focus svg {
  fill: #58ab32;
}
.icon-button__icon--color-hover-eek-a2:hover, .icon-button__icon--color-hover-eek-a2:focus, .icon-button__hover-icon--color-hover-eek-a2:hover, .icon-button__hover-icon--color-hover-eek-a2:focus {
  color: #019039;
}
.icon-button__icon--color-hover-eek-a2:hover svg, .icon-button__icon--color-hover-eek-a2:focus svg, .icon-button__hover-icon--color-hover-eek-a2:hover svg, .icon-button__hover-icon--color-hover-eek-a2:focus svg {
  fill: #019039;
}
.icon-button__icon--color-hover-eek-b:hover, .icon-button__icon--color-hover-eek-b:focus, .icon-button__hover-icon--color-hover-eek-b:hover, .icon-button__hover-icon--color-hover-eek-b:focus {
  color: #fdea14;
}
.icon-button__icon--color-hover-eek-b:hover svg, .icon-button__icon--color-hover-eek-b:focus svg, .icon-button__hover-icon--color-hover-eek-b:hover svg, .icon-button__hover-icon--color-hover-eek-b:focus svg {
  fill: #fdea14;
}
.icon-button__icon--color-hover-eek-c:hover, .icon-button__icon--color-hover-eek-c:focus, .icon-button__hover-icon--color-hover-eek-c:hover, .icon-button__hover-icon--color-hover-eek-c:focus {
  color: #fdcb00;
}
.icon-button__icon--color-hover-eek-c:hover svg, .icon-button__icon--color-hover-eek-c:focus svg, .icon-button__hover-icon--color-hover-eek-c:hover svg, .icon-button__hover-icon--color-hover-eek-c:focus svg {
  fill: #fdcb00;
}
.icon-button__icon--color-hover-eek-d:hover, .icon-button__icon--color-hover-eek-d:focus, .icon-button__hover-icon--color-hover-eek-d:hover, .icon-button__hover-icon--color-hover-eek-d:focus {
  color: #f19305;
}
.icon-button__icon--color-hover-eek-d:hover svg, .icon-button__icon--color-hover-eek-d:focus svg, .icon-button__hover-icon--color-hover-eek-d:hover svg, .icon-button__hover-icon--color-hover-eek-d:focus svg {
  fill: #f19305;
}
.icon-button__icon--color-hover-eek-e:hover, .icon-button__icon--color-hover-eek-e:focus, .icon-button__hover-icon--color-hover-eek-e:hover, .icon-button__hover-icon--color-hover-eek-e:focus {
  color: #e0071b;
}
.icon-button__icon--color-hover-eek-e:hover svg, .icon-button__icon--color-hover-eek-e:focus svg, .icon-button__hover-icon--color-hover-eek-e:hover svg, .icon-button__hover-icon--color-hover-eek-e:focus svg {
  fill: #e0071b;
}
.icon-button__icon::before, .icon-button__hover-icon::before {
  width: 100%;
  margin: 0 auto;
}
.icon-button__hover-icon {
  opacity: 0;
}
.icon-button__icon--slvtec {
  background-color: #01a3ec;
}
.icon-button__icon--slvtec:hover {
  background-color: #01a3ec;
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.icon-button__icon--slvtec:hover svg {
  fill: #fff;
}
.icon-button:hover .icon-button__icon--with-hover-icon, .icon-button:focus .icon-button__icon--with-hover-icon {
  opacity: 0;
}
.icon-button:hover .icon-button__hover-icon, .icon-button:focus .icon-button__hover-icon {
  opacity: 1;
}
.icon-button--color-gray {
  color: #6f6f6f;
}
.icon-button[disabled] .icon-button__icon,
.icon-button[disabled] .icon-button__hover-icon, .icon-button--disabled .icon-button__icon,
.icon-button--disabled .icon-button__hover-icon {
  background-color: #d0d0d0;
  border-color: #d0d0d0;
  color: #fff;
  cursor: not-allowed;
}
.icon-button[disabled] .icon-button__icon:hover, .icon-button[disabled] .icon-button__icon:focus,
.icon-button[disabled] .icon-button__hover-icon:hover,
.icon-button[disabled] .icon-button__hover-icon:focus, .icon-button--disabled .icon-button__icon:hover, .icon-button--disabled .icon-button__icon:focus,
.icon-button--disabled .icon-button__hover-icon:hover,
.icon-button--disabled .icon-button__hover-icon:focus {
  background-color: #d0d0d0;
  border-color: #d0d0d0;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.icon-message__label-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: start;
      -ms-flex-align: start;
          align-items: flex-start;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.icon-message__icon-left-container {
  border-radius: 9999px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  background-color: #fecc00;
  color: #4b4b4d;
  position: relative;
  margin-right: 0.5rem;
  line-height: 1;
  min-width: 2rem;
  height: 2rem;
}
.icon-message__icon-left-container svg {
  fill: #4b4b4d;
}
.icon-message__icon-left svg {
  width: 1.3333333333rem;
  height: 1.3333333333rem;
  fill: #fff;
}
.icon-message--product-configurator .icon-message {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.icon-message--product-configurator .icon-message__label-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.icon-message--login-page .icon-message__icon-left::before {
  color: #fecc00;
  font-size: 2.6666666667rem;
}
.icon-message--login-page .icon-message__label {
  margin-left: 1rem;
}
.icon-message--center .icon-message__label-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
@media only screen and (min-width: 768px) and (max-width: 1024px) {
  .icon-message--center-lg-xl .icon-message__label-container {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
  }
}
.icon-message--error {
  font-size: 0.9333333333rem;
  font-weight: 700;
  line-height: 1.2;
}
.icon-message--error .icon-message__label {
  color: #dd1a16;
}
.icon-message--error .icon-message__icon-left-container {
  background: #dd1a16;
}
.icon-message--font-small {
  font-size: 0.9333333333rem;
  font-weight: 400;
}
.icon-message--icon-small svg {
  width: 1.2rem;
  height: 1.2rem;
}
@media only screen and (min-width: 1024px) {
  .icon-message--icon-small .icon-message__icon-left-container {
    min-width: unset;
  }
}
.icon-message--icon-bg-white .icon-message__icon-left-container {
  background-color: #fff;
  color: #4b4b4d;
}
.icon-message--icon-bg-white .icon-message__icon-left-container svg {
  fill: #4b4b4d;
}
.icon-message--icon-bg-white .icon-message__icon-left {
  color: #4b4b4d;
}
.icon-message--buy-box {
  margin-top: 0.5rem;
}
.icon-message--buy-box .icon-message__icon-left-container {
  min-width: unset;
  background-color: #ececec;
}
.icon-message--buy-box .icon-message__icon-left svg {
  fill: #000;
}
.icon-message--product-item {
  margin-top: 0.5rem;
  font-size: 0.8rem;
  font-weight: 700;
}
.icon-message--product-item .icon-message__label-container {
  margin-left: 0.5rem;
}
.icon-message--product-item .icon-message__icon-left-container {
  background-color: #fff;
  margin-top: 0.2rem;
  margin-right: unset;
  height: unset;
}
.icon-message--product-item .icon-message__icon-left svg {
  width: 0.9333333333rem;
  height: 0.9333333333rem;
  fill: #000;
}
.icon-message--product-item .icon-message__label {
  text-align: left;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.infinite-scrolling {
  border-top-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  margin-top: 2rem;
  padding-top: 3rem;
}
.infinite-scrolling__action-container, .infinite-scrolling__item-count {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
}
.infinite-scrolling__action-container .icon {
  font-size: 1rem;
}
.infinite-scrolling__load-prev {
  margin-bottom: 2rem;
}
.infinite-scrolling__load-next {
  margin: 2rem 0;
}
.infinite-scrolling__item-count {
  font-size: 1.2rem;
  font-weight: 700;
}
.infinite-scrolling__scroll-up {
  width: auto;
  position: sticky;
  bottom: 3rem;
  right: 1rem;
  z-index: 99;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.input-button {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
}
.input-button .text-field {
  -webkit-box-flex: 2;
      -ms-flex-positive: 2;
          flex-grow: 2;
}
.input-button .text-field__input {
  border-radius: 0;
  border-bottom-left-radius: 10px;
  border-top-left-radius: 10px;
  width: 100%;
}
.input-button .button {
  border-radius: 0;
  border-bottom-right-radius: 10px;
  border-top-right-radius: 10px;
  padding: 0;
}
.input-button .button__icon-left-container {
  width: 2rem;
}
.input-button .button .icon {
  width: auto;
  height: auto;
  line-height: 2.2rem;
}
.input-button .button .icon::before {
  margin-right: 0;
}
.input-button .button svg {
  width: 2rem;
  height: 2rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.inspiration-page-banner {
  background-color: #d0d0d0;
  color: #4b4b4d;
  padding: 2rem 2rem 4rem;
}
.inspiration-page-banner svg {
  fill: #4b4b4d;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.inspiration-content {
  padding: 0.1333333333rem;
  -ms-flex-preferred-size: 100%;
      flex-basis: 100%;
  overflow: hidden;
}
.inspiration-content__container {
  overflow: hidden;
  position: relative;
  width: 100%;
  height: 100%;
}
@media only screen and (min-width: 768px) {
  .inspiration-content {
    max-height: 33.3333333333rem;
  }
}
.inspiration-content__asset {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  overflow: hidden;
  width: 100%;
  height: 100%;
  -webkit-transform: scale(1);
          transform: scale(1);
  -webkit-transition: -webkit-transform 3s cubic-bezier(0.23, 1, 0.32, 1);
  transition: -webkit-transform 3s cubic-bezier(0.23, 1, 0.32, 1);
  transition: transform 3s cubic-bezier(0.23, 1, 0.32, 1);
  transition: transform 3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 3s cubic-bezier(0.23, 1, 0.32, 1);
}
.inspiration-content__value {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  padding: 1rem;
}
@media only screen and (min-width: 768px) {
  .inspiration-content__value {
    padding: 3rem;
  }
}
.inspiration-content .headline {
  -ms-flex-item-align: end;
      align-self: flex-end;
  color: #fff;
  font-size: 1.4666666667rem;
  font-weight: 700;
}
.inspiration-content__polarlight {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
  -webkit-box-flex: 2;
      -ms-flex-positive: 2;
          flex-grow: 2;
}
.inspiration-content__polarlight .inspiration-content__subline,
.inspiration-content__polarlight .inspiration-content__separator, .inspiration-content__polarlight-link {
  display: none;
  font-weight: 700;
}
.inspiration-content__polarlight-link {
  color: #fff;
  pointer-events: none;
}
.inspiration-content__polarlight-icon {
  color: rgba(255, 255, 255, 0.6);
  font-size: 6rem;
  position: absolute;
  top: 0;
  right: 0;
}
.inspiration-content__textbox .inspiration-content__subline,
.inspiration-content__textbox .inspiration-content__separator,
.inspiration-content__textbox .inspiration-content__text,
.inspiration-content__textbox .inspiration-content__link {
  display: none;
}
.inspiration-content__textbox .inspiration-content__subline,
.inspiration-content__textbox .inspiration-content__text,
.inspiration-content__textbox .inspiration-content__link {
  font-weight: 700;
}
.inspiration-content__textbox .inspiration-content__link.button--link .button__label-container {
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.inspiration-content__textbox .inspiration-content__separator {
  border-width: 1px;
  border-style: solid;
  border-color: #929292;
  border-width: 1px;
  border-style: solid;
  border-color: #929292;
  margin-left: -0.5rem;
  width: 4rem;
}
@media only screen and (min-width: 768px) {
  .inspiration-content__textbox .inspiration-content__separator {
    margin-left: -1rem;
  }
}
.inspiration-content--small {
  -webkit-box-flex: 2;
      -ms-flex-positive: 2;
          flex-grow: 2;
  -ms-flex-preferred-size: 50%;
      flex-basis: 50%;
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .inspiration-content--small {
    width: calc(50% - 0.2666666667rem);
    -ms-flex-preferred-size: calc(50% - 0.2666666667rem);
        flex-basis: calc(50% - 0.2666666667rem);
  }
}
.inspiration-content--medium, .inspiration-content--medium-big, .inspiration-content--big {
  -ms-flex-preferred-size: 100%;
      flex-basis: 100%;
}
@media only screen and (min-width: 768px) {
  .inspiration-content .headline {
    width: 75%;
  }
  .inspiration-content--small {
    -ms-flex-preferred-size: 33.3333333333%;
        flex-basis: 33.3333333333%;
  }
  .inspiration-content--small .headline {
    width: 100%;
  }
  .inspiration-content--medium {
    -ms-flex-preferred-size: 50%;
        flex-basis: 50%;
  }
  .inspiration-content--medium-big {
    -ms-flex-preferred-size: 66.6666666667%;
        flex-basis: 66.6666666667%;
  }
  .inspiration-content--big {
    -ms-flex-preferred-size: 100%;
        flex-basis: 100%;
  }
  .inspiration-content--medium.inspiration-content--is-textbox, .inspiration-content--medium-big.inspiration-content--is-textbox, .inspiration-content--big.inspiration-content--is-textbox {
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .inspiration-content--medium.inspiration-content--is-textbox .button--w-auto, .inspiration-content--medium-big.inspiration-content--is-textbox .button--w-auto, .inspiration-content--big.inspiration-content--is-textbox .button--w-auto {
    max-width: 50%;
    margin-left: auto;
  }
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) and (min-width: 768px) {
  .inspiration-content--small {
    -ms-flex-preferred-size: calc(33.3333333333% - 0.2666666667rem);
        flex-basis: calc(33.3333333333% - 0.2666666667rem);
  }
  .inspiration-content--medium {
    -ms-flex-preferred-size: calc(50% - 0.2666666667rem);
        flex-basis: calc(50% - 0.2666666667rem);
  }
  .inspiration-content--medium-big {
    -ms-flex-preferred-size: calc(66.6666666667% - 0.2666666667rem);
        flex-basis: calc(66.6666666667% - 0.2666666667rem);
  }
}
@media only screen and (min-width: 768px) {
  .inspiration-content--is-polarlight .inspiration-content__value {
    padding: 4rem 6rem 3rem 3rem;
  }
}
@media only screen and (min-width: 550px) {
  .inspiration-content:hover .headline {
    display: none;
  }
  .inspiration-content:hover .inspiration-content__asset {
    -webkit-transform: scale(1.1);
            transform: scale(1.1);
  }
  .inspiration-content:hover.inspiration-content--is-polarlight .inspiration-content__subline,
  .inspiration-content:hover.inspiration-content--is-polarlight .inspiration-content__separator,
  .inspiration-content:hover.inspiration-content--is-polarlight .inspiration-content__polarlight-link {
    display: block;
    color: #4b4b4d;
  }
  .inspiration-content:hover.inspiration-content--is-polarlight .inspiration-content__value {
    background-color: rgba(255, 255, 255, 0.5);
    padding: 4rem 6rem 3rem 2rem;
  }
  .inspiration-content:hover.inspiration-content--is-polarlight .inspiration-content__polarlight-icon {
    color: #fecc00;
  }
  .inspiration-content:hover.inspiration-content--is-polarlight .inspiration-content__polarlight-link {
    pointer-events: auto;
  }
  .inspiration-content:hover.inspiration-content--is-polarlight .inspiration-content--small .inspiration-content__value {
    background-color: rgba(255, 255, 255, 0.5);
    padding: 4rem 4rem 3rem 2rem;
  }
  .inspiration-content:hover.inspiration-content--is-polarlight .inspiration-content--small .inspiration-content__polarlight {
    text-align: right;
  }
  .inspiration-content:hover.inspiration-content--is-polarlight .inspiration-content--small .inspiration-content__subline {
    -ms-flex-preferred-size: 60%;
        flex-basis: 60%;
  }
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__value {
    background-color: rgba(255, 242, 189, 0.8);
  }
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__subline,
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__separator,
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__text,
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__link {
    display: block;
  }
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__subline,
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__text,
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__link {
    color: #4b4b4d;
    font-weight: 700;
  }
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__link {
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__link:hover, .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__link:focus, .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__link:active {
    color: #fff;
  }
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__link.button--link:hover, .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__link.button--link:focus, .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__link.button--link:active {
    color: #4b4b4d;
  }
}
.inspiration-content .seo-image__image {
  height: 100%;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.inspiration-content-modal {
  position: relative;
}
.inspiration-content-modal__polarlight {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  -webkit-box-flex: 2;
      -ms-flex-positive: 2;
          flex-grow: 2;
}
.inspiration-content-modal__polarlight-icon {
  font-size: 2rem;
  margin-top: -0.75rem;
  color: #fecc00;
}
.inspiration-content-modal__polarlight-link {
  font-weight: 700;
}
.inspiration-content-modal__value {
  padding: 0 1.5rem;
}
.inspiration-content-modal__asset {
  margin-bottom: 1rem;
}
.inspiration-content-modal__asset .seo-image__image {
  width: 90%;
  margin: 0 auto;
  display: block;
}
.inspiration-content-modal .button {
  display: block;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.keen-slider-carousel {
  position: relative;
}
.keen-slider-carousel__container {
  width: 100%;
}
.keen-slider-carousel__arrow {
  position: absolute;
  margin: 0;
  top: 33.3333333333%;
}
.keen-slider-carousel__arrow--prev {
  left: 5%;
}
.keen-slider-carousel__arrow--next {
  right: 5%;
}
.keen-slider-carousel__dots {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  margin-top: 1.2rem;
}
.keen-slider-carousel__dots .keen-slider-carousel__dot {
  display: block;
  margin: 0 0.5rem;
  width: 0.3333333333rem;
  height: 0.3333333333rem;
  background: #ececec;
  border-width: 0.4666666667rem;
  border-style: solid;
  border-color: #ececec;
  border-radius: 9999px;
  font-size: 0;
}
.keen-slider-carousel__dots .keen-slider-carousel__dot:hover {
  cursor: pointer;
}
.keen-slider-carousel__dots .keen-slider-carousel__dot.active {
  width: 0.3333333333rem;
  height: 0.3333333333rem;
  background: rgba(255, 255, 255, 0);
  border-width: 0.4666666667rem;
  border-style: solid;
  border-color: #fecc00;
}
.keen-slider-carousel--cms .keen-slider-carousel__arrow, .keen-slider-carousel--product-family .keen-slider-carousel__arrow {
  top: 0;
  bottom: 0;
  margin: auto 0;
}
.keen-slider-carousel--cms .keen-slider-carousel__arrow--prev, .keen-slider-carousel--product-family .keen-slider-carousel__arrow--prev {
  left: -6%;
}
.keen-slider-carousel--cms .keen-slider-carousel__arrow--next, .keen-slider-carousel--product-family .keen-slider-carousel__arrow--next {
  right: -6%;
}
.keen-slider-carousel--image-slider .keen-slider-carousel__arrow {
  top: calc(50% - 1.5rem);
}
@media only screen and (min-width: 1024px) {
  .keen-slider-carousel--image-slider .keen-slider-carousel__arrow {
    top: 0;
    bottom: 0;
    margin: auto 0;
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .keen-slider-carousel--image-slider .keen-slider-carousel__arrow--prev {
    left: -6%;
  }
  .keen-slider-carousel--image-slider .keen-slider-carousel__arrow--next {
    right: -6%;
  }
}
@media only screen and (min-width: 1024px) {
  .keen-slider-carousel .keen-slider__slide.product-box {
    /**
     * We need the !important in this styles because the keen slider adds inline styles to the slides
     * for min-width, max-width and transform
     */
    /* stylelint-disable declaration-no-important */
    min-width: calc(25% - 7.5px) !important;
    max-width: calc(25% - 7.5px) !important;
    /* stylelint-enbable declaration-no-important */
  }
}

.keen-slider {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  overflow: hidden;
  position: relative;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-touch-callout: none;
  -khtml-user-select: none;
  -ms-touch-action: pan-y;
      touch-action: pan-y;
  -webkit-tap-highlight-color: transparent;
}
.keen-slider__slide {
  position: relative;
  overflow: hidden;
  width: 100%;
  min-height: 100%;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
.keen-slider__slide .cta-button {
  margin-top: auto;
}
.keen-slider[data-keen-slider-v] {
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
}
.keen-slider[data-keen-slider-v] .keen-slider__slide {
  width: 100%;
}
.keen-slider [data-keen-slider-moves] * {
  pointer-events: none;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.loading-indicator {
  display: none;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  width: 100%;
  z-index: 2001;
  background-color: rgba(255, 255, 255, 0.9);
}
.loading-indicator--fixed {
  position: fixed;
  height: 100vh;
}
.loading-indicator--absolute {
  position: absolute;
}
.loading-indicator__active {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.loading-indicator__container {
  position: relative;
  text-align: center;
}
.loading-indicator__image {
  width: 50%;
}
.loading-indicator__text {
  font-size: 1.6666666667rem;
  font-weight: 700;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.loading-spinner__dots {
  display: inline-block;
  position: relative;
  width: 4rem;
}
.loading-spinner__dot {
  position: absolute;
  top: -0.6rem;
  width: 0.5rem;
  height: 0.5rem;
  border-radius: 50%;
  background-color: #fff;
  -webkit-animation-timing-function: cubic-bezier(0, 1, 1, 0);
          animation-timing-function: cubic-bezier(0, 1, 1, 0);
}
.loading-spinner__dot:nth-child(1) {
  left: 8px;
  -webkit-animation: lds-ellipsis1 0.6s infinite;
          animation: lds-ellipsis1 0.6s infinite;
}
.loading-spinner__dot:nth-child(2) {
  left: 8px;
  -webkit-animation: lds-ellipsis2 0.6s infinite;
          animation: lds-ellipsis2 0.6s infinite;
}
.loading-spinner__dot:nth-child(3) {
  left: 24px;
  -webkit-animation: lds-ellipsis2 0.6s infinite;
          animation: lds-ellipsis2 0.6s infinite;
}
.loading-spinner__dot:nth-child(4) {
  left: 40px;
  -webkit-animation: lds-ellipsis3 0.6s infinite;
          animation: lds-ellipsis3 0.6s infinite;
}
.loading-spinner--dark .loading-spinner__dot {
  background-color: #4b4b4d;
}
@-webkit-keyframes lds-ellipsis1 {
  0% {
    -webkit-transform: scale(0);
            transform: scale(0);
  }
  100% {
    -webkit-transform: scale(1);
            transform: scale(1);
  }
}
@keyframes lds-ellipsis1 {
  0% {
    -webkit-transform: scale(0);
            transform: scale(0);
  }
  100% {
    -webkit-transform: scale(1);
            transform: scale(1);
  }
}
@-webkit-keyframes lds-ellipsis3 {
  0% {
    -webkit-transform: scale(1);
            transform: scale(1);
  }
  100% {
    -webkit-transform: scale(0);
            transform: scale(0);
  }
}
@keyframes lds-ellipsis3 {
  0% {
    -webkit-transform: scale(1);
            transform: scale(1);
  }
  100% {
    -webkit-transform: scale(0);
            transform: scale(0);
  }
}
@-webkit-keyframes lds-ellipsis2 {
  0% {
    -webkit-transform: translate(0, 0);
            transform: translate(0, 0);
  }
  100% {
    -webkit-transform: translate(16px, 0);
            transform: translate(16px, 0);
  }
}
@keyframes lds-ellipsis2 {
  0% {
    -webkit-transform: translate(0, 0);
            transform: translate(0, 0);
  }
  100% {
    -webkit-transform: translate(16px, 0);
            transform: translate(16px, 0);
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.logo {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.logo__logo {
  width: 7rem;
}
@media only screen and (min-width: 550px) {
  .logo__logo {
    width: 7rem;
  }
}
@media only screen and (min-width: 768px) {
  .logo__logo {
    width: 11.8666666667rem;
  }
}
.logo--product-configurator, .logo--checkout {
  padding-right: 0;
  margin-top: -0.6666666667rem;
  margin-bottom: -0.6666666667rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.modal-window {
  z-index: 2000;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  position: fixed;
  opacity: 0;
  visibility: hidden;
  -webkit-transform: scale(1.1);
          transform: scale(1.1);
  -webkit-transition: visibility 0s linear 0.25s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s, -webkit-transform 0.25s;
  pointer-events: none;
}
.modal-window__overlay {
  z-index: 1000;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  position: fixed;
  opacity: 0;
  background-color: rgba(0, 0, 0, 0.5);
  visibility: hidden;
  -webkit-transform: scale(1.1);
          transform: scale(1.1);
  -webkit-transition: visibility 0s linear 0.25s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s, -webkit-transform 0.25s;
}
.modal-window__overlay_blur {
  -webkit-backdrop-filter: blur(5px);
          backdrop-filter: blur(5px);
}
.modal-window__container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  pointer-events: all;
  background-color: #fff;
  position: absolute;
  top: 50%;
  left: 50%;
  height: 100%;
  width: 100%;
  -webkit-transform: translate(-50%, -50%);
          transform: translate(-50%, -50%);
}
@media only screen and (min-width: 768px) {
  .modal-window__container {
    height: 90%;
    width: 90%;
  }
}
.modal-window__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  padding: 0.75rem 1.5rem;
  position: relative;
}
.modal-window__header .headline {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  word-break: break-all;
  width: calc(100% - 2.4rem);
  font-size: 1.4666666667rem;
  margin-bottom: 0;
}
@media only screen and (min-width: 768px) {
  .modal-window__header .headline {
    width: 100%;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    font-size: 2.4rem;
  }
}
.modal-window__close-button-container {
  position: absolute;
  right: 0;
  top: 0;
}
.modal-window__close-button-container .icon-button {
  width: 1.6666666667rem;
  height: 1.6666666667rem;
  margin: 0.5rem;
}
.modal-window__close-button-container .icon-button__icon-container {
  width: 1.6666666667rem;
  height: 1.6666666667rem;
}
.modal-window__close-button-container .icon-button .icon--close {
  width: 1.6666666667rem;
  height: 1.6666666667rem;
}
.modal-window__close-button-container .icon-button .icon--close svg {
  width: 1.6666666667rem;
  height: 1.6666666667rem;
}
@media only screen and (min-width: 768px) {
  .modal-window__close-button-container .icon-button {
    width: 1rem;
    height: 1rem;
    cursor: pointer;
    margin: 0.75rem;
    /* stylelint-disable-next-line max-nesting-depth */
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .modal-window__close-button-container .icon-button__icon-container {
    width: 1rem;
    height: 1rem;
  }
  .modal-window__close-button-container .icon-button .icon--close {
    width: 1rem;
    height: 1rem;
  }
  .modal-window__close-button-container .icon-button .icon--close svg {
    width: 1rem;
    height: 1rem;
  }
}
.modal-window__content {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  height: 100%;
  overflow: auto;
  padding: 2.5rem 1.5rem 1.5rem;
}
.modal-window__content::after {
  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0)), color-stop(90%, rgb(255, 255, 255)));
  background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgb(255, 255, 255) 90%);
}
.modal-window__active {
  opacity: 1;
  visibility: visible;
  -webkit-transform: scale(1);
          transform: scale(1);
  -webkit-transition: visibility 0s linear 0s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0s, opacity 0.25s 0s, transform 0.25s;
  transition: visibility 0s linear 0s, opacity 0.25s 0s, transform 0.25s, -webkit-transform 0.25s;
}
.modal-window--medium .modal-window__container {
  max-width: 65.3333333333rem;
}
.modal-window .modal-window__close-window .button {
  border-radius: unset;
}
.modal-window--product-configurator .modal-window__container {
  height: 100%;
}
@media only screen and (min-width: 768px) {
  .modal-window--product-configurator .modal-window__container {
    max-width: 75%;
    left: 50%;
    height: 50%;
  }
}
@media only screen and (min-width: 1024px) {
  .modal-window--product-configurator .modal-window__container {
    max-width: 600px;
    left: 50%;
    height: 50%;
  }
}
.modal-window--product-configurator .modal-window__container .modal-window__close-window {
  display: none;
}
.modal-window--product-configurator .modal-window__content {
  padding: 1.5rem 1.5rem 1.5rem;
}
.modal-window--product-configurator .modal-window__header .headline {
  width: 100%;
  font-size: 2rem;
  font-weight: 400;
  word-break: break-word;
  margin-top: 1rem;
}
.modal-window--product-configurator-small .modal-window__container {
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 768px) {
  .modal-window--product-configurator-small .modal-window__container {
    width: 50%;
    max-width: 1200px;
    min-width: calc(1200px / 2);
    height: 30%;
    min-height: 16.6666666667rem;
  }
}
.modal-window--product-configurator-small .modal-window__header {
  background-color: #ececec;
}
.modal-window--product-configurator-small .modal-window__content {
  padding: 1.5rem 4rem 1.5rem;
}
.modal-window--product-configurator-no-driver .modal-window__container {
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 768px) {
  .modal-window--product-configurator-no-driver .modal-window__container {
    height: auto;
    min-height: unset;
  }
}
.modal-window--product-configurator-no-driver .modal-window__container .modal-window__close-window {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 768px) {
  .modal-window--product-configurator-no-driver .modal-window__container .modal-window__close-window {
    -webkit-box-pack: end;
        -ms-flex-pack: end;
            justify-content: flex-end;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
  }
}
.modal-window--product-configurator-no-driver .modal-window__container .modal-window__close-window .button {
  border-radius: 0.6666666667rem;
}
.modal-window--product-configurator-no-driver .modal-window__modal-actions {
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.modal-window--product-configurator-no-driver .modal-window__modal-actions .move-forward {
  margin-top: 0.5rem;
}
@media only screen and (min-width: 768px) {
  .modal-window--product-configurator-no-driver .modal-window__modal-actions .move-forward {
    margin-top: 0;
    margin-left: 0.5rem;
  }
}
.modal-window--product-configurator-no-driver .modal-window__content {
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
@media only screen and (min-width: 1024px) {
  .modal-window--track-configurator .modal-window__container {
    max-width: 66.6666666667rem;
  }
}
.modal-window__room-view-image-container {
  margin: 0 auto;
}
.modal-window__room-view-image {
  width: -moz-fit-content;
  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
  width: -webkit-fit-content;
  width: fit-content;
}
.modal-window--rimless .modal-window__content {
  padding: 2.5rem 0 1.5rem;
}
.modal-window--sb-image .modal-window__image {
  min-width: 100%;
}
.modal-window .service-sidebar-content {
  display: block;
}
.modal-window--dynamic-content .modal-window__container {
  border-width: 3px;
  border-style: solid;
  border-color: #fecc00;
  max-width: 51.2rem;
  max-height: 90%;
  height: auto;
}
.modal-window--dynamic-content .modal-window__content > .container {
  margin: 0;
}
.modal-window--dynamic-content .newsletter-element {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
.modal-window--dynamic-content .newsletter-element__image-container {
  -ms-flex-preferred-size: unset;
      flex-basis: unset;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.navigation-dropdown-menu {
  border-top-width: 1px;
  border-style: solid;
  border-color: #ececec;
}
.navigation-dropdown-menu__right-side {
  background-color: #ececec;
  color: #4b4b4d;
  padding-left: 1.5rem;
  padding-right: 1.5rem;
}
.navigation-dropdown-menu__right-side svg {
  fill: #4b4b4d;
}
.navigation-dropdown-menu__left-side {
  background-color: #fff;
  color: #4b4b4d;
}
.navigation-dropdown-menu__left-side svg {
  fill: #4b4b4d;
}
.navigation-dropdown-menu__reduced-menu {
  background-color: #fff;
  color: #4b4b4d;
  padding-left: 1.5rem;
  padding-right: 1.5rem;
}
.navigation-dropdown-menu__reduced-menu svg {
  fill: #4b4b4d;
}
.navigation-dropdown-menu__reduced-menu .navigation-node-item:not(:first-child) {
  margin-left: 1.5rem;
}
.navigation-dropdown-menu__teaser-container {
  padding-top: 1.5rem;
  padding-bottom: 1.5rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.navigation-dropdown-submenu__headline {
  line-height: 3rem;
  font-weight: 700;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.navigation-dropdown-submenu__headline .icon {
  font-size: 1.4666666667rem;
  margin-right: 0.5rem;
}
.navigation-dropdown-submenu__node-items {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
.navigation-dropdown-submenu__row {
  width: 100%;
}
.navigation-dropdown-submenu__teaser-container {
  padding-top: 1.5rem;
  padding-bottom: 1.5rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
@media only screen and (min-width: 768px) {
  .navigation-footer {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -ms-flex-flow: wrap;
        flex-flow: wrap;
  }
}
.navigation-footer.container {
  padding: 0;
}
.navigation-footer__quality {
  font-weight: 700;
  padding: 0 1rem 0 1rem;
}
.navigation-footer__quality-text {
  font-weight: 400;
  padding-top: 0.6666666667rem;
  font-size: 0.9333333333rem;
}
@media only screen and (min-width: 550px) {
  .navigation-footer__quality-text {
    padding-right: 1.3333333333rem;
  }
}
.navigation-footer__international {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  text-transform: uppercase;
  padding: 0 0 1rem 0;
  font-weight: 700;
}
.navigation-footer__international-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
}
.navigation-footer__international-text {
  line-height: 3rem;
}
.navigation-footer__international-icon {
  font-size: 2.3333333333rem;
}
.navigation-footer__contact-info {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  padding: 1rem;
}
@media only screen and (min-width: 768px) {
  .navigation-footer__contact-info {
    border-top: 0;
    display: block;
  }
}
.navigation-footer__social {
  font-weight: 700;
  padding-left: 1rem;
  text-transform: uppercase;
}
@media only screen and (min-width: 768px) {
  .navigation-footer__social {
    padding: 0 1rem 1rem 0;
  }
}
.navigation-footer__social-icons {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-flow: row wrap;
          flex-flow: row wrap;
  padding-top: 1rem;
  width: 100%;
}
@media only screen and (min-width: 1024px) {
  .navigation-footer__social-icons {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    -webkit-box-pack: start;
        -ms-flex-pack: start;
            justify-content: flex-start;
    -ms-flex-wrap: wrap;
        flex-wrap: wrap;
    width: 100%;
  }
}
.navigation-footer__social-icons .icon-button {
  -ms-flex-preferred-size: 25%;
      flex-basis: 25%;
  margin-bottom: 1rem;
}
@media only screen and (min-width: 768px) {
  .navigation-footer__social-icons .icon-button {
    -ms-flex-preferred-size: auto;
        flex-basis: auto;
    margin: 0 0.5rem 0.5rem 0;
  }
}
.navigation-footer__social-icons .icon-button__icon-container {
  margin: 0;
}
.navigation-footer__social-icons--default {
  width: 100%;
}
.navigation-footer__social-icons--default .icon-button {
  margin: 0 0.5rem 0.5rem 0;
}
.navigation-footer .icon--facebook:hover {
  background-color: #3b5998;
}
.navigation-footer .icon--instagram:hover {
  background-color: #e1306c;
}
.navigation-footer .icon--linkedin:hover {
  background-color: #0077b5;
}
.navigation-footer .icon--youtube:hover {
  background-color: #c4302b;
}
.navigation-footer .icon--twitter:hover {
  background-color: #00acee;
}
.navigation-footer .icon--xing:hover {
  background-color: #126567;
}
.navigation-footer .icon--pinterest:hover {
  background-color: #c8232c;
}
.navigation-footer .icon--whatsapp:hover {
  background-color: #128c7e;
}
.navigation-footer .icon svg {
  width: 2rem;
  height: 2rem;
  fill: #fff;
}
.navigation-footer .icon.navigation-footer__brand {
  margin-right: 4rem;
  width: 5.6666666667rem;
  height: 5.3333333333rem;
}
.navigation-footer .icon.navigation-footer__brand svg {
  width: unset;
  height: unset;
}
@media only screen and (min-width: 768px) {
  .navigation-footer .icon.navigation-footer__brand {
    margin-right: 0;
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .navigation-footer .icon.navigation-footer__brand svg {
    width: inherit;
    height: inherit;
  }
}
.navigation-footer a {
  color: #fff;
}
.navigation-footer a:hover {
  color: #fecc00;
}
.navigation-footer .toggler-accordion__icon {
  padding-right: 1rem;
  font-size: 1.6666666667rem;
}
.navigation-footer .toggler-accordion__icon svg {
  width: 1.6666666667rem;
  height: 1.6666666667rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.navigation-list-mobile-item {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  width: 100%;
  line-height: 3rem;
  padding-left: 1rem;
  padding-right: 1rem;
}
.navigation-list-mobile-item__caret {
  display: none;
  font-size: 1.3333333333rem;
}
.navigation-list-mobile-item__caret svg {
  width: 1.3333333333rem;
  height: 1.3333333333rem;
}
.navigation-list-mobile-item__caret--has-caret {
  display: block;
}
.navigation-list-mobile-item--uppercase {
  text-transform: uppercase;
}
.navigation-list-mobile-item--slvtec {
  text-transform: none;
}
.navigation-list-mobile-item--top-padding {
  padding-top: 1.5rem;
}
.navigation-list-mobile-item--trigger {
  cursor: pointer;
}
.navigation-list-mobile-item--trigger:hover {
  background-color: #ececec;
  color: #4b4b4d;
}
.navigation-list-mobile-item--trigger:hover svg {
  fill: #4b4b4d;
}
.navigation-list-mobile-item--bg-alt {
  background-color: #4b4b4d;
  color: #fff;
}
.navigation-list-mobile-item--bg-alt svg {
  fill: #fff;
}
.navigation-list-mobile-item--internationalization {
  border-top-width: 1px;
  border-style: solid;
  border-color: #6f6f6f;
  border-bottom: 0;
}
.navigation-list-mobile-item--border-b {
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
}
.navigation-list-mobile-item--border-b-white {
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #fff;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.navigation-node-item {
  width: 100%;
  display: block;
  font-size: 1rem;
  line-height: 3rem;
}
@media only screen and (min-width: 1024px) {
  .navigation-node-item {
    display: inline-block;
    position: relative;
  }
}
.navigation-node-item__trigger--with-caret-char-before {
  padding-left: 1.5rem;
}
.navigation-node-item__trigger--with-caret-char-before .navigation-node-item__link,
.navigation-node-item__trigger--with-caret-char-before .navigation-node-item__text {
  /* stylelint-disable-next-line max-nesting-depth */
}
.navigation-node-item__trigger--with-caret-char-before .navigation-node-item__link::before,
.navigation-node-item__trigger--with-caret-char-before .navigation-node-item__text::before {
  /* stylelint-disable-next-line declaration-no-important */
  left: 1.5rem !important;
}
.navigation-node-item__trigger--selected {
  background-color: #ececec;
  color: #4b4b4d;
}
.navigation-node-item__trigger--selected svg {
  fill: #4b4b4d;
}
.navigation-node-item__link:hover, .navigation-node-item__link:focus {
  color: #929292;
}
.navigation-node-item__link, .navigation-node-item__text {
  width: 100%;
  height: 100%;
  display: block;
  padding-left: 1.25rem;
}
.navigation-node-item__trigger:hover {
  background-color: #ececec;
  color: #4b4b4d;
}
.navigation-node-item__trigger:hover svg {
  fill: #4b4b4d;
}
.navigation-node-item--border-b {
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
}
.navigation-node-item--border-b-white {
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #fff;
}
.navigation-node-item--with-caret-char-before .navigation-node-item__link::before,
.navigation-node-item--with-caret-char-before .navigation-node-item__text::before {
  content: ">";
  position: absolute;
  left: 0;
}
.navigation-node-item--uppercase {
  text-transform: uppercase;
}
.navigation-node-item--x-padding-xxxl .navigation-node-item__link,
.navigation-node-item--x-padding-xxxl .navigation-node-item__text {
  padding-left: 5rem;
  padding-right: 5rem;
}
.navigation-node-item--x-padding-xxl .navigation-node-item__link,
.navigation-node-item--x-padding-xxl .navigation-node-item__text {
  padding-left: 4rem;
  padding-right: 4rem;
}
.navigation-node-item--x-padding-xl .navigation-node-item__link,
.navigation-node-item--x-padding-xl .navigation-node-item__text {
  padding-left: 3rem;
  padding-right: 3rem;
}
.navigation-node-item--x-padding-large .navigation-node-item__link,
.navigation-node-item--x-padding-large .navigation-node-item__text {
  padding-left: 2.5rem;
  padding-right: 2.5rem;
}
.navigation-node-item--x-padding-biggest .navigation-node-item__link,
.navigation-node-item--x-padding-biggest .navigation-node-item__text {
  padding-left: 2rem;
  padding-right: 2rem;
}
.navigation-node-item--x-padding-bigger .navigation-node-item__link,
.navigation-node-item--x-padding-bigger .navigation-node-item__text {
  padding-left: 1.5rem;
  padding-right: 1.5rem;
}
.navigation-node-item--x-padding-big .navigation-node-item__link,
.navigation-node-item--x-padding-big .navigation-node-item__text {
  padding-left: 1rem;
  padding-right: 1rem;
}
.navigation-node-item--x-padding-medium .navigation-node-item__link,
.navigation-node-item--x-padding-medium .navigation-node-item__text {
  padding-left: 0.75rem;
  padding-right: 0.75rem;
}
.navigation-node-item--x-padding-medium-small .navigation-node-item__link,
.navigation-node-item--x-padding-medium-small .navigation-node-item__text {
  padding-left: 0.63rem;
  padding-right: 0.63rem;
}
.navigation-node-item--x-padding-default .navigation-node-item__link,
.navigation-node-item--x-padding-default .navigation-node-item__text {
  padding-left: 0.5rem;
  padding-right: 0.5rem;
}
.navigation-node-item--x-padding-small .navigation-node-item__link,
.navigation-node-item--x-padding-small .navigation-node-item__text {
  padding-left: 0.25rem;
  padding-right: 0.25rem;
}
.navigation-node-item--x-padding-reset .navigation-node-item__link,
.navigation-node-item--x-padding-reset .navigation-node-item__text {
  padding-left: 0;
  padding-right: 0;
}
.navigation-node-item--x-padding .navigation-node-item__link,
.navigation-node-item--x-padding .navigation-node-item__text {
  padding: 0.75rem 1.5rem;
  line-height: 1.5;
}
.navigation-node-item--top-padding {
  padding-top: 1.5rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
/* stylelint-disable max-nesting-depth */
.page-info {
  background-color: #fff;
  padding: 0.6666666667rem 0 0.8rem;
}
@media only screen and (min-width: 768px) {
  .page-info {
    padding-top: 0.9333333333rem;
  }
}
.page-info__container {
  padding: 0;
}
@media only screen and (min-width: 550px) {
  .page-info__container {
    padding: 0 1rem;
  }
}
.page-info--product-configurator, .page-info--checkout {
  background-color: inherit;
  padding: 1rem 0;
  margin: -2.1333333333rem 0 0;
  position: relative;
  z-index: 400;
  /* stylelint-disable selector-no-qualifying-type */
  /* stylelint-enable selector-no-qualifying-type */
}
.page-info--product-configurator .breadcrumb-step, .page-info--checkout .breadcrumb-step {
  margin: 0;
  width: 25%;
}
.page-info--product-configurator .breadcrumb-step__checked, .page-info--checkout .breadcrumb-step__checked {
  display: none;
}
.page-info--product-configurator .breadcrumb-step__number, .page-info--checkout .breadcrumb-step__number {
  display: none;
}
.page-info--product-configurator .breadcrumb-step__link, .page-info--checkout .breadcrumb-step__link {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  width: 100%;
  height: 100%;
  text-align: center;
  padding: 0.5rem 0 0.5rem 1.5rem;
  position: relative;
  font-weight: 500;
  color: #4b4b4d;
  font-size: 0.8rem;
  word-spacing: 6rem;
  line-height: 0.9rem;
}
@media only screen and (min-width: 550px) {
  .page-info--product-configurator .breadcrumb-step__link, .page-info--checkout .breadcrumb-step__link {
    font-size: 1.2rem;
    word-spacing: inherit;
    line-height: inherit;
  }
}
.page-info--product-configurator .breadcrumb-step__link::after, .page-info--checkout .breadcrumb-step__link::after {
  border-width: 1px;
  border-style: solid;
  border-color: #ececec #ececec transparent transparent;
  content: "";
  position: absolute;
  right: -0.8rem;
  top: 0.4rem;
  -webkit-transform: rotate(45deg);
          transform: rotate(45deg);
  width: 2.2666666667rem;
  height: 2.2666666667rem;
  z-index: 1;
}
@media only screen and (min-width: 550px) {
  .page-info--product-configurator .breadcrumb-step__link::after, .page-info--checkout .breadcrumb-step__link::after {
    top: 0.2666666667rem;
    width: 2rem;
    height: 2rem;
  }
}
.page-info--product-configurator .breadcrumb-step--complete, .page-info--checkout .breadcrumb-step--complete {
  border-bottom-right-radius: 0.6666666667rem;
  border-top-right-radius: 0.6666666667rem;
}
.page-info--product-configurator .breadcrumb-step--complete .breadcrumb-step__link, .page-info--checkout .breadcrumb-step--complete .breadcrumb-step__link {
  border-bottom-left-radius: 0.6666666667rem;
  border-top-left-radius: 0.6666666667rem;
}
.page-info--product-configurator .breadcrumb-step--disabled .breadcrumb-step__link, .page-info--checkout .breadcrumb-step--disabled .breadcrumb-step__link {
  border-top-width: 1px;
  border-style: solid;
  border-color: #ececec;
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #ececec;
}
.page-info--product-configurator .breadcrumb-step--active, .page-info--checkout .breadcrumb-step--active {
  background-color: #fecc00;
  color: #4b4b4d;
  border: none;
}
.page-info--product-configurator .breadcrumb-step--active svg, .page-info--checkout .breadcrumb-step--active svg {
  fill: #4b4b4d;
}
.page-info--product-configurator .breadcrumb-step--active .breadcrumb-step__link, .page-info--checkout .breadcrumb-step--active .breadcrumb-step__link {
  color: #4b4b4d;
  border: none;
}
.page-info--product-configurator .breadcrumb-step--active .breadcrumb-step__link::after, .page-info--checkout .breadcrumb-step--active .breadcrumb-step__link::after {
  border-width: 1.5666666667rem;
  border-style: solid;
  border-color: transparent transparent transparent #fecc00;
  -webkit-transform: rotate(0deg);
          transform: rotate(0deg);
  width: auto;
  height: auto;
  top: -0.0666666667rem;
  right: -3rem;
  z-index: 200;
}
@media only screen and (min-width: 550px) {
  .page-info--product-configurator .breadcrumb-step--active .breadcrumb-step__link::after, .page-info--checkout .breadcrumb-step--active .breadcrumb-step__link::after {
    border-width: 1.3333333333rem;
    right: -2.6rem;
  }
}
.page-info--product-configurator .breadcrumb-step--active .breadcrumb-step__link::before, .page-info--checkout .breadcrumb-step--active .breadcrumb-step__link::before {
  border-width: 1.5666666667rem;
  border-style: solid;
  border-color: transparent transparent transparent #fff;
  content: "";
  -webkit-transform: rotate(0deg);
          transform: rotate(0deg);
  position: absolute;
  left: 0;
  top: -0.0666666667rem;
  right: -2.9333333333rem;
}
@media only screen and (min-width: 550px) {
  .page-info--product-configurator .breadcrumb-step--active .breadcrumb-step__link::before, .page-info--checkout .breadcrumb-step--active .breadcrumb-step__link::before {
    border-width: 1.3333333333rem;
    right: -2.5333333333rem;
  }
}
@media only screen and (min-width: 1024px) {
  .page-info--product-configurator .breadcrumb-step--active .breadcrumb-step__link::before, .page-info--checkout .breadcrumb-step--active .breadcrumb-step__link::before {
    border-width: 1.5666666667rem;
    border-style: solid;
    border-color: transparent transparent transparent #fff;
    border-width: 1.3333333333rem;
    right: -2.5333333333rem;
  }
}
.page-info--product-configurator .breadcrumb-step__link:last-child, .page-info--checkout .breadcrumb-step__link:last-child {
  font-size: 0.8rem;
  font-weight: 500;
}
@media only screen and (min-width: 550px) {
  .page-info--product-configurator .breadcrumb-step__link:last-child, .page-info--checkout .breadcrumb-step__link:last-child {
    font-size: 1.2rem;
  }
}
.page-info--product-configurator .breadcrumb-step__holder, .page-info--checkout .breadcrumb-step__holder {
  height: 100%;
}
.page-info--product-configurator .breadcrumb-step__holder .breadcrumb-step__link, .page-info--checkout .breadcrumb-step__holder .breadcrumb-step__link {
  background-color: #ececec;
  color: #4b4b4d;
  font-size: 0.8rem;
  color: #4b4b4d;
}
.page-info--product-configurator .breadcrumb-step__holder .breadcrumb-step__link svg, .page-info--checkout .breadcrumb-step__holder .breadcrumb-step__link svg {
  fill: #4b4b4d;
}
@media only screen and (min-width: 550px) {
  .page-info--product-configurator .breadcrumb-step__holder .breadcrumb-step__link, .page-info--checkout .breadcrumb-step__holder .breadcrumb-step__link {
    font-size: 1.2rem;
  }
}
.page-info--product-configurator .breadcrumb-step__holder .breadcrumb-step__link::after, .page-info--checkout .breadcrumb-step__holder .breadcrumb-step__link::after {
  border-width: 1.56rem;
  border-style: solid;
  border-color: transparent transparent transparent #ececec;
  -webkit-transform: rotate(0deg);
          transform: rotate(0deg);
  width: auto;
  height: auto;
  top: -0.0666666667rem;
  right: -2.9333333333rem;
  z-index: 200;
}
@media only screen and (min-width: 550px) {
  .page-info--product-configurator .breadcrumb-step__holder .breadcrumb-step__link::after, .page-info--checkout .breadcrumb-step__holder .breadcrumb-step__link::after {
    border-width: 1.3333333333rem;
    right: -2.5333333333rem;
  }
}
.page-info--product-configurator .breadcrumb-step__holder .breadcrumb-step__link::before, .page-info--checkout .breadcrumb-step__holder .breadcrumb-step__link::before {
  border-width: 1.5666666667rem;
  border-style: solid;
  border-color: transparent transparent transparent #fff;
  content: "";
  -webkit-transform: rotate(0deg);
          transform: rotate(0deg);
  position: absolute;
  left: 0;
  top: -0.0666666667rem;
  right: -3.5rem;
}
@media only screen and (min-width: 550px) {
  .page-info--product-configurator .breadcrumb-step__holder .breadcrumb-step__link::before, .page-info--checkout .breadcrumb-step__holder .breadcrumb-step__link::before {
    border-width: 1.3333333333rem;
    right: -2.5333333333rem;
  }
}
@media only screen and (max-width: 1023px) {
  .page-info--product-configurator .breadcrumb-step--active.breadcrumb-step--step-1 *::before, .page-info--product-configurator .breadcrumb-step--progress-complete.breadcrumb-step--step-1 *::before, .page-info--checkout .breadcrumb-step--active.breadcrumb-step--step-1 *::before, .page-info--checkout .breadcrumb-step--progress-complete.breadcrumb-step--step-1 *::before {
    display: none;
  }
}
.page-info--product-configurator .breadcrumb-step:last-child.breadcrumb-step__link, .page-info--checkout .breadcrumb-step:last-child.breadcrumb-step__link {
  color: #4b4b4d;
  font-weight: 500;
}
.page-info--product-configurator .breadcrumb-step:last-child.breadcrumb-step__link:hover, .page-info--checkout .breadcrumb-step:last-child.breadcrumb-step__link:hover {
  color: #4b4b4d;
}
.page-info--product-configurator .breadcrumb-step__link:last-child:hover, .page-info--checkout .breadcrumb-step__link:last-child:hover {
  color: #4b4b4d;
}
.page-info--product-configurator .breadcrumb-step--progress-step:last-child .breadcrumb-step__link::after, .page-info--checkout .breadcrumb-step--progress-step:last-child .breadcrumb-step__link::after {
  display: none;
}
.page-info--product-configurator .breadcrumb-step--progress-step:first-child .breadcrumb-step__link::before, .page-info--checkout .breadcrumb-step--progress-step:first-child .breadcrumb-step__link::before {
  display: none;
}
.page-info--product-configurator .breadcrumb-step--progress-step:not(:last-child)::after, .page-info--product-configurator .breadcrumb-step--progress-complete:not(:last-child)::after, .page-info--checkout .breadcrumb-step--progress-step:not(:last-child)::after, .page-info--checkout .breadcrumb-step--progress-complete:not(:last-child)::after {
  display: none;
}
.page-info--product-configurator .breadcrumb-step--progress-complete:last-child .breadcrumb-step__link, .page-info--product-configurator .breadcrumb-step--disabled:last-child .breadcrumb-step__link, .page-info--checkout .breadcrumb-step--progress-complete:last-child .breadcrumb-step__link, .page-info--checkout .breadcrumb-step--disabled:last-child .breadcrumb-step__link {
  border-top-width: 1px;
  border-style: solid;
  border-color: #ececec;
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #ececec;
}
@media only screen and (min-width: 550px) {
  .page-info--product-configurator .breadcrumb-step--progress-complete:last-child .breadcrumb-step__link, .page-info--product-configurator .breadcrumb-step--disabled:last-child .breadcrumb-step__link, .page-info--checkout .breadcrumb-step--progress-complete:last-child .breadcrumb-step__link, .page-info--checkout .breadcrumb-step--disabled:last-child .breadcrumb-step__link {
    border-right-width: 1px;
    border-style: solid;
    border-color: #ececec;
    border-bottom-right-radius: 0.6666666667rem;
    border-top-right-radius: 0.6666666667rem;
  }
}
.page-info--product-configurator .breadcrumb-step--progress-complete:last-child .breadcrumb-step__link::after, .page-info--product-configurator .breadcrumb-step--disabled:last-child .breadcrumb-step__link::after, .page-info--checkout .breadcrumb-step--progress-complete:last-child .breadcrumb-step__link::after, .page-info--checkout .breadcrumb-step--disabled:last-child .breadcrumb-step__link::after {
  display: none;
}
.page-info--product-configurator .breadcrumb--progress, .page-info--checkout .breadcrumb--progress {
  background-color: #fff;
  color: #4b4b4d;
  padding: 0;
  overflow: hidden;
  z-index: 600;
}
.page-info--product-configurator .breadcrumb--progress svg, .page-info--checkout .breadcrumb--progress svg {
  fill: #4b4b4d;
}
@media only screen and (min-width: 550px) {
  .page-info--product-configurator .breadcrumb--progress, .page-info--checkout .breadcrumb--progress {
    border-radius: 0.6666666667rem;
    background-color: #fff;
    color: #4b4b4d;
  }
  .page-info--product-configurator .breadcrumb--progress svg, .page-info--checkout .breadcrumb--progress svg {
    fill: #4b4b4d;
  }
}
@media only screen and (min-width: 550px) {
  .page-info--product-configurator li.breadcrumb-step:last-of-type, .page-info--checkout li.breadcrumb-step:last-of-type {
    border-bottom-right-radius: 0.6666666667rem;
    border-top-right-radius: 0.6666666667rem;
  }
  .page-info--product-configurator li.breadcrumb-step:last-of-type .breadcrumb-step__link, .page-info--checkout li.breadcrumb-step:last-of-type .breadcrumb-step__link {
    border-bottom-right-radius: 0.6666666667rem;
    border-top-right-radius: 0.6666666667rem;
  }
}
@media only screen and (min-width: 550px) {
  .page-info--product-configurator li.breadcrumb-step:first-of-type, .page-info--checkout li.breadcrumb-step:first-of-type {
    border-bottom-left-radius: 0.6666666667rem;
    border-top-left-radius: 0.6666666667rem;
  }
  .page-info--product-configurator li.breadcrumb-step:first-of-type .breadcrumb-step__link, .page-info--checkout li.breadcrumb-step:first-of-type .breadcrumb-step__link {
    border-bottom-left-radius: 0.6666666667rem;
    border-top-left-radius: 0.6666666667rem;
  }
}
@media only screen and (min-width: 550px) {
  .page-info--product-configurator .breadcrumb-step--mobile {
    display: none;
  }
}
@media only screen and (max-width: 549px) {
  .page-info--product-configurator .breadcrumb-step--desktop {
    display: none;
  }
}
.page-info .breadcrumb-step-cart {
  display: none;
}
@media only screen and (min-width: 1024px) {
  .page-info .breadcrumb-step-cart {
    width: 5%;
    position: relative;
    display: block;
  }
  .page-info .breadcrumb-step-cart .breadcrumb-step-cart__cart-container {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    background-color: #ececec;
    color: #4b4b4d;
    overflow: hidden;
    z-index: 100;
    height: 100%;
  }
  .page-info .breadcrumb-step-cart .breadcrumb-step-cart__cart-container svg {
    fill: #4b4b4d;
  }
  .page-info .breadcrumb-step-cart .breadcrumb-step__cart:hover {
    color: #fecc00;
  }
  .page-info .breadcrumb-step-cart .breadcrumb-step__cart::before {
    line-height: 1;
    font-size: 1.7rem;
  }
  .page-info .breadcrumb-step-cart .breadcrumb-step__cart::after {
    border-width: 1.3333333333rem;
    border-style: solid;
    border-color: transparent transparent transparent #ececec;
    content: "";
    -webkit-transform: rotate(0deg);
            transform: rotate(0deg);
    width: auto;
    height: auto;
    top: -0.0666666667rem;
    right: -2.5333333333rem;
    z-index: 200;
    position: absolute;
  }
}
.page-info__title {
  padding-top: 0.2666666667rem;
  font: 700 1.4666666667rem/1.7333333333rem "Lato", sans-serif;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
@media only screen and (min-width: 550px) {
  .page-info__title {
    display: block;
    padding-top: 0;
    font-size: 1.8666666667rem;
    line-height: 2.4rem;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.panel-info-item {
  display: none;
}
@media only screen and (min-width: 1024px) {
  .panel-info-item {
    display: block;
    font-size: 0.7333333333rem;
    font-weight: 500;
    line-height: 2.6666666667rem;
    opacity: 0.5;
    text-transform: uppercase;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.privacy-navigation {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: end;
      -ms-flex-align: end;
          align-items: flex-end;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  text-align: left;
  padding-top: 0.6666666667rem;
  -webkit-box-ordinal-group: 3;
      -ms-flex-order: 2;
          order: 2;
  width: 100%;
}
.privacy-navigation__item {
  padding: 0 0.5333333333rem;
  margin-bottom: 1.3333333333rem;
  color: #4b4b4d;
  text-decoration: underline;
  white-space: nowrap;
}
.privacy-navigation__item:not(:first-child) {
  padding-top: 5px;
}
.privacy-navigation__border {
  border-right: 0.0666666667rem solid #4b4b4d;
  text-decoration: underline;
}
@media only screen and (min-width: 768px) {
  .privacy-navigation {
    -webkit-box-pack: right;
        -ms-flex-pack: right;
            justify-content: right;
    width: unset;
    padding-top: 0;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-box {
  /* stylelint-disable-next-line declaration-no-important */
  display: block !important;
  overflow: hidden;
  height: auto;
  padding: 0 0.5rem;
}
@media only screen and (min-width: 1024px) {
  .product-box {
    max-width: 18.6666666667rem;
  }
}
.product-box__container {
  border-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  height: 100%;
  position: relative;
  overflow: hidden;
  background-color: #fff;
}
.product-box__container--slvtec {
  border-color: #01a3ec;
}
.product-box__go-to {
  margin-left: auto;
}
.product-box__go-to--with-price {
  margin-left: 1rem;
}
@media only screen and (min-width: 1024px) {
  .product-box__go-to a {
    font-size: 0.8rem;
  }
}
.product-box__info {
  text-align: center;
  padding: 10px 20px 0px;
  padding: 0.6666666667rem 1.3333333333rem 0rem;
  -ms-flex-negative: 0;
      flex-shrink: 0;
  -ms-flex-preferred-size: auto;
      flex-basis: auto;
}
.product-box__title {
  font-size: inherit;
  line-height: inherit;
}
.product-box__description, .product-box__sku {
  font-size: 0.9333333333rem;
}
.product-box__energy-sku {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  padding: 0px 20px;
  padding: 0rem 1.3333333333rem;
  margin-top: auto;
}
.product-box .energy-label {
  -ms-flex-item-align: center;
      align-self: center;
  min-height: 2rem;
}
.product-box .energy-label svg {
  width: 2rem;
  height: 2rem;
}
.product-box__sku {
  -ms-word-break: break-all;
  word-break: break-all;
  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
  word-break: break-word;
  -ms-hyphens: auto;
      hyphens: auto;
  color: #4b4b4d;
  margin: 0;
}
.product-box__variant-button {
  padding: 10px 20px 0px;
  padding: 0.6666666667rem 1.3333333333rem 0rem;
  min-height: 3.3333333333rem;
}
.product-box__availability {
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  padding: 10px 20px 0px;
  padding: 0.6666666667rem 1.3333333333rem 0rem;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
}
.product-box__availability .availability__dots {
  width: auto;
}
.product-box__availability .availability__label {
  margin-left: 7.5px;
  margin-left: 0.5rem;
}
.product-box__availability .availability__label--small {
  width: 100%;
  text-align: center;
  margin-left: 0;
}
.product-box__actions-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  padding: 10px 20px 10px;
  padding: 0.6666666667rem 1.3333333333rem 0.6666666667rem;
  width: 100%;
}
.product-box__actions-container--no-price {
  -ms-flex-item-align: end;
      align-self: flex-end;
}
.product-box__actions-container--buyable {
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.product-box__actions-container .icon-button {
  margin: 0 0 0 0.6666666667rem;
}
.product-box__add-to-cart {
  /* stylelint-disable-next-line selector-class-pattern */
}
.product-box__add-to-cart .js-product-box__form {
  height: 3rem;
}
.product-box__add-to-cart .quantity-input-select {
  width: 4rem;
}
@media only screen and (min-width: 768px) {
  .product-box__add-to-cart .quantity-input-select {
    width: 3.3333333333rem;
  }
}
.product-box__add-to-cart .quantity-input-select .input {
  padding: 0.9333333333rem 0.5rem;
}
.product-box__add-to-cart .quantity-input-select__select {
  padding: 0;
}
.product-box__add-to-cart .quantity-input-select .select__caret {
  right: 0.25rem;
}
.product-box__add-to-cart .button {
  padding: 0.8rem 0.6666666667rem;
}
.product-box__price {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
.product-box__price .price__amount {
  font-size: 1.2rem;
  line-height: 1.2;
  margin-right: 0;
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.product-box__price .price__amount-label {
  display: inline-block;
  font-size: 0.9333333333rem;
  color: #4b4b4d;
}
.product-box__price .price__amount--alt {
  margin-top: auto;
}
.product-box__price.price--sale {
  -ms-flex-item-align: start;
      align-self: flex-start;
  min-height: 3rem;
}
.product-box__image-wrap {
  height: 275px;
  height: 18.3333333333rem;
  -ms-flex-negative: 0;
      flex-shrink: 0;
  -ms-flex-preferred-size: auto;
      flex-basis: auto;
}
.product-box__image-wrap .thumbnail {
  height: 100%;
  text-align: center;
}
.product-box__image-wrap .thumbnail__image {
  height: 275px;
  height: 18.3333333333rem;
  margin: 0 auto;
}
.product-box--catalog, .product-box--category {
  margin-bottom: 1.5rem;
}
@media only screen and (max-width: 549px) {
  .product-box--catalog:last-child, .product-box--category:last-child {
    margin-bottom: 0;
  }
}
.product-box .slick-carousel {
  height: 100%;
}
.product-box .slick-carousel__container,
.product-box .slick-carousel .slick-list,
.product-box .slick-carousel .slick-track,
.product-box .slick-carousel .slick-slide {
  height: 100%;
}
.product-box .slick-carousel .slick-slide {
  margin: 0 1rem;
}
.product-box .slick-carousel .nav-arrow {
  border-radius: 0;
  width: 60px;
  width: 4rem;
  height: 60px;
  height: 4rem;
  top: unset;
  bottom: -1rem;
  background: rgba(255, 255, 255, 0.5);
  opacity: 1;
  font-size: 2rem;
  line-height: 0.5;
  text-align: center;
}
@media only screen and (min-width: 768px) {
  .product-box .slick-carousel .nav-arrow {
    bottom: -2rem;
  }
}
@media only screen and (min-width: 1024px) {
  .product-box .slick-carousel .nav-arrow {
    font-size: 2rem;
    width: 30px;
    width: 2rem;
    height: 30px;
    height: 2rem;
    bottom: -1rem;
  }
}
.product-box .slick-carousel .nav-arrow--prev {
  left: 0;
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 1024px) {
  .product-box .slick-carousel .nav-arrow--prev {
    left: 1rem;
  }
}
.product-box .slick-carousel .nav-arrow--next {
  right: 0;
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 1024px) {
  .product-box .slick-carousel .nav-arrow--next {
    right: 1rem;
  }
}
.product-box .slick-carousel .icon {
  position: relative;
  top: 33.3333333333%;
}
.product-box--cms .product-box__image-wrap {
  height: 230px;
  height: 15.3333333333rem;
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.product-box--cms .product-box__image-wrap .thumbnail__image {
  height: 230px;
  height: 15.3333333333rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-box {
  /* stylelint-disable-next-line declaration-no-important */
  display: block !important;
  overflow: hidden;
  height: auto;
  padding: 0 0.5rem;
}
@media only screen and (min-width: 1024px) {
  .product-box {
    max-width: 18.6666666667rem;
  }
}
.product-box__container {
  border-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  height: 100%;
  position: relative;
  overflow: hidden;
  background-color: #fff;
}
.product-box__container--slvtec {
  border-color: #01a3ec;
}
.product-box__go-to {
  margin-left: auto;
}
.product-box__go-to--with-price {
  margin-left: 1rem;
}
@media only screen and (min-width: 1024px) {
  .product-box__go-to a {
    font-size: 0.8rem;
  }
}
.product-box__info {
  text-align: center;
  padding: 10px 20px 0px;
  padding: 0.6666666667rem 1.3333333333rem 0rem;
  -ms-flex-negative: 0;
      flex-shrink: 0;
  -ms-flex-preferred-size: auto;
      flex-basis: auto;
}
.product-box__title {
  font-size: inherit;
  line-height: inherit;
}
.product-box__description, .product-box__sku {
  font-size: 0.9333333333rem;
}
.product-box__energy-sku {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  padding: 0px 20px;
  padding: 0rem 1.3333333333rem;
  margin-top: auto;
}
.product-box .energy-label {
  -ms-flex-item-align: center;
      align-self: center;
  min-height: 2rem;
}
.product-box .energy-label svg {
  width: 2rem;
  height: 2rem;
}
.product-box__sku {
  -ms-word-break: break-all;
  word-break: break-all;
  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
  word-break: break-word;
  -ms-hyphens: auto;
      hyphens: auto;
  color: #4b4b4d;
  margin: 0;
}
.product-box__variant-button {
  padding: 10px 20px 0px;
  padding: 0.6666666667rem 1.3333333333rem 0rem;
  min-height: 3.3333333333rem;
}
.product-box__availability {
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  padding: 10px 20px 0px;
  padding: 0.6666666667rem 1.3333333333rem 0rem;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
}
.product-box__availability .availability__dots {
  width: auto;
}
.product-box__availability .availability__label {
  margin-left: 7.5px;
  margin-left: 0.5rem;
}
.product-box__availability .availability__label--small {
  width: 100%;
  text-align: center;
  margin-left: 0;
}
.product-box__actions-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  padding: 10px 20px 10px;
  padding: 0.6666666667rem 1.3333333333rem 0.6666666667rem;
  width: 100%;
}
.product-box__actions-container--no-price {
  -ms-flex-item-align: end;
      align-self: flex-end;
}
.product-box__actions-container--buyable {
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.product-box__actions-container .icon-button {
  margin: 0 0 0 0.6666666667rem;
}
.product-box__add-to-cart {
  /* stylelint-disable-next-line selector-class-pattern */
}
.product-box__add-to-cart .js-product-box__form {
  height: 3rem;
}
.product-box__add-to-cart .quantity-input-select {
  width: 4rem;
}
@media only screen and (min-width: 768px) {
  .product-box__add-to-cart .quantity-input-select {
    width: 3.3333333333rem;
  }
}
.product-box__add-to-cart .quantity-input-select .input {
  padding: 0.9333333333rem 0.5rem;
}
.product-box__add-to-cart .quantity-input-select__select {
  padding: 0;
}
.product-box__add-to-cart .quantity-input-select .select__caret {
  right: 0.25rem;
}
.product-box__add-to-cart .button {
  padding: 0.8rem 0.6666666667rem;
}
.product-box__price {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
.product-box__price .price__amount {
  font-size: 1.2rem;
  line-height: 1.2;
  margin-right: 0;
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.product-box__price .price__amount-label {
  display: inline-block;
  font-size: 0.9333333333rem;
  color: #4b4b4d;
}
.product-box__price .price__amount--alt {
  margin-top: auto;
}
.product-box__price.price--sale {
  -ms-flex-item-align: start;
      align-self: flex-start;
  min-height: 3rem;
}
.product-box__image-wrap {
  height: 275px;
  height: 18.3333333333rem;
  -ms-flex-negative: 0;
      flex-shrink: 0;
  -ms-flex-preferred-size: auto;
      flex-basis: auto;
}
.product-box__image-wrap .thumbnail {
  height: 100%;
  text-align: center;
}
.product-box__image-wrap .thumbnail__image {
  height: 275px;
  height: 18.3333333333rem;
  margin: 0 auto;
}
.product-box--catalog, .product-box--category {
  margin-bottom: 1.5rem;
}
@media only screen and (max-width: 549px) {
  .product-box--catalog:last-child, .product-box--category:last-child {
    margin-bottom: 0;
  }
}
.product-box .slick-carousel {
  height: 100%;
}
.product-box .slick-carousel__container,
.product-box .slick-carousel .slick-list,
.product-box .slick-carousel .slick-track,
.product-box .slick-carousel .slick-slide {
  height: 100%;
}
.product-box .slick-carousel .slick-slide {
  margin: 0 1rem;
}
.product-box .slick-carousel .nav-arrow {
  border-radius: 0;
  width: 60px;
  width: 4rem;
  height: 60px;
  height: 4rem;
  top: unset;
  bottom: -1rem;
  background: rgba(255, 255, 255, 0.5);
  opacity: 1;
  font-size: 2rem;
  line-height: 0.5;
  text-align: center;
}
@media only screen and (min-width: 768px) {
  .product-box .slick-carousel .nav-arrow {
    bottom: -2rem;
  }
}
@media only screen and (min-width: 1024px) {
  .product-box .slick-carousel .nav-arrow {
    font-size: 2rem;
    width: 30px;
    width: 2rem;
    height: 30px;
    height: 2rem;
    bottom: -1rem;
  }
}
.product-box .slick-carousel .nav-arrow--prev {
  left: 0;
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 1024px) {
  .product-box .slick-carousel .nav-arrow--prev {
    left: 1rem;
  }
}
.product-box .slick-carousel .nav-arrow--next {
  right: 0;
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 1024px) {
  .product-box .slick-carousel .nav-arrow--next {
    right: 1rem;
  }
}
.product-box .slick-carousel .icon {
  position: relative;
  top: 33.3333333333%;
}
.product-box--cms .product-box__image-wrap {
  height: 230px;
  height: 15.3333333333rem;
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.product-box--cms .product-box__image-wrap .thumbnail__image {
  height: 230px;
  height: 15.3333333333rem;
}

.product-box-downloads {
  /* stylelint-disable-next-line declaration-no-important */
  display: block !important;
  overflow: hidden;
  height: auto;
  padding: 0 0.5rem;
}
@media only screen and (min-width: 1024px) {
  .product-box-downloads {
    max-width: 18.6666666667rem;
  }
}
.product-box-downloads__container {
  border-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  height: 100%;
  position: relative;
  overflow: hidden;
  background-color: #fff;
}
.product-box-downloads__container--slvtec {
  border-color: #01a3ec;
}
.product-box-downloads__go-to {
  margin-left: auto;
}
.product-box-downloads__go-to--with-price {
  margin-left: 1rem;
}
@media only screen and (min-width: 1024px) {
  .product-box-downloads__go-to a {
    font-size: 0.8rem;
  }
}
.product-box-downloads__info {
  text-align: center;
  padding: 10px 20px 0px;
  padding: 0.6666666667rem 1.3333333333rem 0rem;
  -ms-flex-negative: 0;
      flex-shrink: 0;
  -ms-flex-preferred-size: auto;
      flex-basis: auto;
}
.product-box-downloads__title {
  font-size: inherit;
  line-height: inherit;
}
.product-box-downloads__description, .product-box-downloads__sku {
  font-size: 0.9333333333rem;
}
.product-box-downloads__energy-sku {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  padding: 0px 20px;
  padding: 0rem 1.3333333333rem;
  margin-top: auto;
}
.product-box-downloads .energy-label {
  -ms-flex-item-align: center;
      align-self: center;
  min-height: 2rem;
}
.product-box-downloads .energy-label svg {
  width: 2rem;
  height: 2rem;
}
.product-box-downloads__sku {
  -ms-word-break: break-all;
  word-break: break-all;
  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
  word-break: break-word;
  -ms-hyphens: auto;
      hyphens: auto;
  color: #4b4b4d;
  margin: 0;
}
.product-box-downloads__variant-button {
  padding: 10px 20px 0px;
  padding: 0.6666666667rem 1.3333333333rem 0rem;
  min-height: 3.3333333333rem;
}
.product-box-downloads__availability {
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  padding: 10px 20px 0px;
  padding: 0.6666666667rem 1.3333333333rem 0rem;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
}
.product-box-downloads__availability .availability__dots {
  width: auto;
}
.product-box-downloads__availability .availability__label {
  margin-left: 7.5px;
  margin-left: 0.5rem;
}
.product-box-downloads__availability .availability__label--small {
  width: 100%;
  text-align: center;
  margin-left: 0;
}
.product-box-downloads__actions-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  padding: 10px 20px 10px;
  padding: 0.6666666667rem 1.3333333333rem 0.6666666667rem;
  width: 100%;
}
.product-box-downloads__actions-container--no-price {
  -ms-flex-item-align: end;
      align-self: flex-end;
}
.product-box-downloads__actions-container--buyable {
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.product-box-downloads__actions-container .icon-button {
  margin: 0 0 0 0.6666666667rem;
}
.product-box-downloads__add-to-cart {
  /* stylelint-disable-next-line selector-class-pattern */
}
.product-box-downloads__add-to-cart .js-product-box__form {
  height: 3rem;
}
.product-box-downloads__add-to-cart .quantity-input-select {
  width: 4rem;
}
@media only screen and (min-width: 768px) {
  .product-box-downloads__add-to-cart .quantity-input-select {
    width: 3.3333333333rem;
  }
}
.product-box-downloads__add-to-cart .quantity-input-select .input {
  padding: 0.9333333333rem 0.5rem;
}
.product-box-downloads__add-to-cart .quantity-input-select__select {
  padding: 0;
}
.product-box-downloads__add-to-cart .quantity-input-select .select__caret {
  right: 0.25rem;
}
.product-box-downloads__add-to-cart .button {
  padding: 0.8rem 0.6666666667rem;
}
.product-box-downloads__price {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
.product-box-downloads__price .price__amount {
  font-size: 1.2rem;
  line-height: 1.2;
  margin-right: 0;
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.product-box-downloads__price .price__amount-label {
  display: inline-block;
  font-size: 0.9333333333rem;
  color: #4b4b4d;
}
.product-box-downloads__price .price__amount--alt {
  margin-top: auto;
}
.product-box-downloads__price.price--sale {
  -ms-flex-item-align: start;
      align-self: flex-start;
  min-height: 3rem;
}
.product-box-downloads__image-wrap {
  height: 275px;
  height: 18.3333333333rem;
  -ms-flex-negative: 0;
      flex-shrink: 0;
  -ms-flex-preferred-size: auto;
      flex-basis: auto;
}
.product-box-downloads__image-wrap .thumbnail {
  height: 100%;
  text-align: center;
}
.product-box-downloads__image-wrap .thumbnail__image {
  height: 275px;
  height: 18.3333333333rem;
  margin: 0 auto;
}
.product-box-downloads--catalog, .product-box-downloads--category {
  margin-bottom: 1.5rem;
}
@media only screen and (max-width: 549px) {
  .product-box-downloads--catalog:last-child, .product-box-downloads--category:last-child {
    margin-bottom: 0;
  }
}
.product-box-downloads .slick-carousel {
  height: 100%;
}
.product-box-downloads .slick-carousel__container,
.product-box-downloads .slick-carousel .slick-list,
.product-box-downloads .slick-carousel .slick-track,
.product-box-downloads .slick-carousel .slick-slide {
  height: 100%;
}
.product-box-downloads .slick-carousel .slick-slide {
  margin: 0 1rem;
}
.product-box-downloads .slick-carousel .nav-arrow {
  border-radius: 0;
  width: 60px;
  width: 4rem;
  height: 60px;
  height: 4rem;
  top: unset;
  bottom: -1rem;
  background: rgba(255, 255, 255, 0.5);
  opacity: 1;
  font-size: 2rem;
  line-height: 0.5;
  text-align: center;
}
@media only screen and (min-width: 768px) {
  .product-box-downloads .slick-carousel .nav-arrow {
    bottom: -2rem;
  }
}
@media only screen and (min-width: 1024px) {
  .product-box-downloads .slick-carousel .nav-arrow {
    font-size: 2rem;
    width: 30px;
    width: 2rem;
    height: 30px;
    height: 2rem;
    bottom: -1rem;
  }
}
.product-box-downloads .slick-carousel .nav-arrow--prev {
  left: 0;
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 1024px) {
  .product-box-downloads .slick-carousel .nav-arrow--prev {
    left: 1rem;
  }
}
.product-box-downloads .slick-carousel .nav-arrow--next {
  right: 0;
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 1024px) {
  .product-box-downloads .slick-carousel .nav-arrow--next {
    right: 1rem;
  }
}
.product-box-downloads .slick-carousel .icon {
  position: relative;
  top: 33.3333333333%;
}
.product-box-downloads--cms .product-box-downloads__image-wrap {
  height: 230px;
  height: 15.3333333333rem;
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.product-box-downloads--cms .product-box-downloads__image-wrap .thumbnail__image {
  height: 230px;
  height: 15.3333333333rem;
}
.product-box-downloads__variant-button {
  padding: 20px;
  padding: 1.3333333333rem;
}
.product-box-downloads__energy-sku {
  margin-top: unset;
}
.product-box-downloads__download-list {
  padding: 0px 20px;
  padding: 0rem 1.3333333333rem;
  margin-bottom: auto;
}
.product-box-downloads .download-dropdown .download-select__container {
  width: calc(100% - 3rem);
  max-width: calc(100% - 3rem);
}
.product-box-downloads .download-dropdown .download-select__container .custom-select__select,
.product-box-downloads .download-dropdown .download-select__container .select2-selection__rendered {
  border-radius: 0.6666666667rem 0 0 0.6666666667rem;
  height: 3rem;
}
.product-box-downloads .download-dropdown .download-select__container .custom-select {
  width: 100%;
  /* stylelint-disable-next-line max-nesting-depth */
}
.product-box-downloads .download-dropdown .download-select__container .custom-select__select {
  width: 100%;
}
.product-box-downloads .download-dropdown .icon {
  border-radius: 0 0.6666666667rem 0.6666666667rem 0;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-item-attributes__color {
  display: inline-block;
  width: 0.9333333333rem;
  height: 0.9333333333rem;
  border-radius: 50%;
  margin-left: 0.2666666667rem;
  text-indent: -9999px;
  vertical-align: middle;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-item-base {
  margin-bottom: 20px;
  margin-bottom: 1.3333333333rem;
  border-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  position: relative;
}
@media only screen and (min-width: 768px) {
  .product-item-base {
    padding: 0;
    margin-bottom: 1.3333333333rem;
  }
}
.product-item-base__details-button {
  display: block;
  margin: 0 1rem 1rem;
}
.product-item-base__position {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  padding: 1rem;
}
@media only screen and (min-width: 769px) {
  .product-item-base__position {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -ms-flex-wrap: wrap;
        flex-wrap: wrap;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
    justify-content: space-between;
    -ms-flex-wrap: nowrap;
        flex-wrap: nowrap;
  }
}
.product-item-base__product-info {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
  -ms-flex-negative: 4;
      flex-shrink: 4;
}
.product-item-base__position-info, .product-item-base__price-availability {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-align: end;
      -ms-flex-align: end;
          align-items: flex-end;
}
@media only screen and (min-width: 769px) {
  .product-item-base__price-availability {
    padding-bottom: 1rem;
  }
}
.product-item-base__position-info {
  text-align: right;
  -ms-flex-preferred-size: 30%;
      flex-basis: 30%;
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
}
.product-item-base__position-info--dynamic {
  -ms-flex-preferred-size: auto;
      flex-basis: auto;
}
.product-item-base__position-info--reduced {
  -ms-flex-preferred-size: 25%;
      flex-basis: 25%;
}
.product-item-base__position-actions {
  background-color: #ececec;
  color: #4b4b4d;
}
.product-item-base__position-actions svg {
  fill: #4b4b4d;
}
.product-item-base__image {
  width: 50%;
  padding-right: 0.5rem;
}
@media only screen and (min-width: 551px) {
  .product-item-base__image {
    width: 13.3333333333rem;
    min-width: 13.3333333333rem;
  }
  .product-item-base__image--search {
    padding-right: 0;
    max-width: 5rem;
    min-width: 5rem;
    min-height: 5rem;
    max-height: 5rem;
  }
  .product-item-base__image--product-configurator {
    width: 6.6666666667rem;
    min-width: 6.6666666667rem;
  }
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) and (min-width: 551px) {
  .product-item-base__image .product-item-image__image {
    width: 12.3333333333rem;
    min-width: 12.3333333333rem;
  }
}
.product-item-base__info {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  width: 100%;
  margin: 0 0.6666666667rem;
}
.product-item-base__description {
  margin: 0;
  margin-bottom: 0.5rem;
  -ms-flex-negative: 0;
      flex-shrink: 0;
}
.product-item-base__energy-sku {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  -webkit-box-align: start;
      -ms-flex-align: start;
          align-items: flex-start;
}
.product-item-base .energy-label {
  font-size: 3rem;
  line-height: 1.4666666667rem;
  margin-right: 0.75rem;
}
.product-item-base .price {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-align: end;
      -ms-flex-align: end;
          align-items: flex-end;
}
.product-item-base .price--configurator, .product-item-base .price--track-configurator {
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  width: 100%;
}
@media only screen and (min-width: 1024px) {
  .product-item-base .price--configurator, .product-item-base .price--track-configurator {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    -webkit-box-align: end;
        -ms-flex-align: end;
            align-items: flex-end;
  }
}
.product-item-base .price--configurator .price__quantity-holder, .product-item-base .price--track-configurator .price__quantity-holder {
  margin-top: 1rem;
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 1024px) {
  .product-item-base .price--configurator .price__quantity-holder, .product-item-base .price--track-configurator .price__quantity-holder {
    margin-top: 0;
  }
}
.product-item-base .price--track-configurator {
  position: relative;
  margin-top: 1.3333333333rem;
}
@media only screen and (min-width: 768px) {
  .product-item-base .price--track-configurator {
    margin-top: 0;
  }
}
.product-item-base .price--track-configurator .price__quantity-holder {
  position: absolute;
  left: 0;
  margin-top: 0;
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 768px) {
  .product-item-base .price--track-configurator .price__quantity-holder {
    position: relative;
  }
}
.product-item-base .price--track-configurator .price__container {
  width: 100%;
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 768px) {
  .product-item-base .price--track-configurator .price__container {
    width: auto;
  }
}
.product-item-base .availability {
  margin-top: 0.5rem;
}
.product-item-base .availability__dots {
  width: auto;
}
.product-item-base--checkout-summary .availability__label {
  margin-left: 0.5rem;
  white-space: nowrap;
}
.product-item-base--checkout-summary .product-item-base__info {
  padding-right: 0.5rem;
}
.product-item-base--checkout-summary .product-item-base__description {
  font-size: 0.9333333333rem;
}
.product-item-base--checkout-summary .product-item-base__image {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  width: 10.6666666667rem;
  min-width: 10.6666666667rem;
}
@media only screen and (min-width: 769px) {
  .product-item-base--checkout-summary .product-item-base__image {
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
  }
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) and (min-width: 551px) {
  .product-item-base--checkout-summary .product-item-image__image {
    width: 10rem;
    min-width: 10rem;
  }
}
.product-item-base--shopping-list .product-item-base__image {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
@media only screen and (min-width: 769px) {
  .product-item-base--shopping-list .product-item-base__image {
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
  }
}
.product-item-base--shopping-list .product-item-base__position-select {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 1;
  padding: 1rem;
  width: 3.4666666667rem;
  height: 3.4666666667rem;
}
@media only screen and (min-width: 769px) {
  .product-item-base--shopping-list .product-item-base__position-select {
    -ms-flex-item-align: center;
        align-self: center;
    position: inherit;
    top: unset;
    left: unset;
    padding: unset;
    width: unset;
    height: unset;
  }
}
.product-item-base--shopping-list .product-item-base__remove {
  display: none;
}
@media only screen and (min-width: 769px) {
  .product-item-base--shopping-list .product-item-base__remove {
    display: inline-block;
    margin-top: auto;
    padding-top: 0.5rem;
  }
}
.product-item-base--shopping-list .product-item-base__remove .button {
  padding: 0;
  text-align: left;
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.product-item-base--shopping-list .product-item-base__remove .button__label {
  margin-left: 0;
}
.product-item-base--shopping-list .product-item-base__remove .button__label-container {
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.product-item-base--shopping-list .product-item-base__remove-icon .icon {
  font-size: 2.4rem;
  line-height: 3rem;
  color: #4b4b4d;
}
.product-item-base--shopping-list .product-item-base__position-info {
  -ms-flex-preferred-size: 45%;
      flex-basis: 45%;
}
@media only screen and (min-width: 1025px) {
  .product-item-base--shopping-list .product-item-base__position-info {
    -ms-flex-preferred-size: 42%;
        flex-basis: 42%;
  }
}
.product-item-base--shopping-list .product-item-base__add-to-cart {
  width: 100%;
  margin-top: auto;
  padding-top: 1rem;
}
.product-item-base--shopping-list .product-item-base__add-to-cart .quantity-input-select {
  margin-left: auto;
}
@media only screen and (min-width: 550px) {
  .product-item-base--shopping-list .product-item-base__add-to-cart {
    width: auto;
  }
}
.product-item-base--shopping-list .product-item-base__info-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
  width: 100%;
}
@media only screen and (min-width: 769px) {
  .product-item-base--shopping-list .product-item-base__info-container {
    width: auto;
  }
}
.product-item-base--search {
  border: none;
  margin-bottom: 0.5rem;
}
.product-item-base--search .product-item-base__title--search {
  font-size: 1rem;
  font-weight: 700;
}
.product-item-base--search .product-item-base__description--search {
  margin: 0;
}
.product-item-base--search .title--checkout {
  margin: 0;
}
.product-item-base--search .product-item-base__position {
  padding: 0;
}
.product-item-base--search .product-item-base__info--search {
  margin-left: 1rem;
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) and (min-width: 551px) {
  .product-item-base--search .product-item-base__image {
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .product-item-base--search .product-item-base__image--search .product-item-image__image {
    width: auto;
    min-width: auto;
  }
}
.product-item-base--configuration {
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.product-item-base--configuration .product-item-base__position {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
@media only screen and (min-width: 1024px) {
  .product-item-base--configuration .product-item-base__position {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
  }
}
.product-item-base--configuration .product-item-base__price-availability {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-align: end;
      -ms-flex-align: end;
          align-items: flex-end;
}
.product-item-base--configuration .product-item-base__price-availability--no-price {
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.product-item-base--configuration .product-item-base__price-availability--no-price .price--configurator,
.product-item-base--configuration .product-item-base__price-availability--no-price .price--track-configurator {
  width: auto;
  margin-right: 0.5rem;
}
.product-item-base--configuration .product-item-base__price-availability--no-price .availability {
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  width: 100%;
}
.product-item-base--configuration .product-item-base__product-info {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
@media only screen and (min-width: 1024px) {
  .product-item-base--configuration .product-item-base__product-info {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    width: 100%;
  }
}
.product-item-base--configuration .product-item-base__position-info {
  -ms-flex-preferred-size: 100%;
      flex-basis: 100%;
}
@media only screen and (min-width: 1024px) {
  .product-item-base--configuration .product-item-base__position-info {
    -ms-flex-preferred-size: 40%;
        flex-basis: 40%;
  }
  .product-item-base--configuration .product-item-base__position-info--dynamic {
    -ms-flex-preferred-size: auto;
        flex-basis: auto;
  }
  .product-item-base--configuration .product-item-base__position-info--reduced {
    -ms-flex-preferred-size: 25%;
        flex-basis: 25%;
  }
}
@media only screen and (min-width: 1024px) {
  .product-item-base--configuration .product-item-base__position-info--dynamic {
    -ms-flex-preferred-size: auto;
        flex-basis: auto;
  }
}
.product-item-base--configuration .product-item-base__position-info--reduced .price__container--configurator {
  -ms-flex-item-align: center;
      align-self: center;
}
.product-item-base--configuration .product-item-base__info-container {
  width: 100%;
}
.product-item-base--configuration .product-item-base__position-actions {
  background: none;
}
.product-item-base--configuration .product-item-base__energy-sku {
  margin-top: auto;
}
.product-item-base--configuration .product-item-base__image--configuration {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  width: 100%;
}
@media only screen and (min-width: 1024px) {
  .product-item-base--configuration .product-item-base__image--configuration {
    -webkit-box-pack: start;
        -ms-flex-pack: start;
            justify-content: flex-start;
    width: 10rem;
    min-width: 10rem;
  }
}
@media only screen and (max-width: 374px) {
  .product-item-base--configuration .product-item-base__description {
    word-break: break-all;
  }
}
.product-item-base--configuration .product-item-base__image-container {
  width: 5rem;
  min-width: 5rem;
}
.product-item-base--configuration .product-item-base__attributes--configuration {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  flex-wrap: wrap;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.product-item-base--configuration .product-item-base__attribute {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  -ms-flex-line-pack: center;
      align-content: center;
  padding-bottom: 0.5rem;
  width: 50%;
}
@media only screen and (min-width: 550px) {
  .product-item-base--configuration .product-item-base__attribute {
    width: 33.3333333333%;
  }
}
.product-item-base--configuration .product-item-base__attribute-name {
  -ms-word-break: break-all;
  word-break: break-all;
  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
  word-break: break-word;
  -ms-hyphens: auto;
      hyphens: auto;
  font-size: 0.6666666667rem;
  text-transform: uppercase;
}
.product-item-base--configuration .product-item-base__action-trigger-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
}
.product-item-base--configuration .product-item-base__action-trigger-container > * {
  position: relative;
}
@media only screen and (max-width: 767px) {
  .product-item-base--configuration .product-item-base__action-trigger-container > *:first-child {
    margin: 0 1rem;
  }
}
@media only screen and (max-width: 767px) {
  .product-item-base--configuration .product-item-base__action-trigger-container > *:only-child {
    margin: 0 1rem 0 auto;
  }
}
@media only screen and (min-width: 768px) {
  .product-item-base--configuration .product-item-base__action-trigger-container > * {
    margin-left: auto;
  }
}
.product-item-base--configuration .product-item-base__trigger--download .button__label-container {
  position: relative;
}
.product-item-base--configuration .product-item-base__trigger--download .icon {
  left: -1.5rem;
}
.product-item-base--configuration .product-item-base__trigger--download .icon--caret-up {
  display: none;
}
.product-item-base--configuration .product-item-base__trigger--download.active .icon--caret-up {
  display: inline-block;
}
.product-item-base--configuration .product-item-base__trigger--download.active .icon--caret-down {
  display: none;
}
.product-item-base--configuration-accessories .product-item-base__product-info {
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
}
.product-item-base--configuration-accessories .product-item-base__image--configuration {
  width: 5rem;
  min-width: 5rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-item-image {
  position: relative;
}
.product-item-image__item {
  width: 100%;
  overflow: hidden;
}
@media only screen and (min-width: 768px) {
  .product-item-image--summary {
    padding-top: 1.8666666667rem;
    padding-bottom: 1.3333333333rem;
  }
}
.product-item-image--shopping-list {
  padding: 0;
}
@media only screen and (min-width: 768px) {
  .product-item-image--shopping-list {
    padding-top: 1.8666666667rem;
    padding-bottom: 1.3333333333rem;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-item-options {
  margin-top: 1.0666666667rem;
}
.product-item-options--summary {
  margin-top: 0.2666666667rem;
}
@media only screen and (min-width: 768px) {
  .product-item-options--summary {
    margin-top: 1.0666666667rem;
  }
}
.product-item-options__item {
  font-size: 0.8666666667rem;
  color: #b2b2b2;
  display: block;
}
@media only screen and (min-width: 768px) {
  .product-item-options__item {
    font-size: 0.9333333333rem;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.inspiration-content-modal {
  position: relative;
}
.inspiration-content-modal__polarlight {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  -webkit-box-flex: 2;
      -ms-flex-positive: 2;
          flex-grow: 2;
}
.inspiration-content-modal__polarlight-icon {
  font-size: 2rem;
  margin-top: -0.75rem;
  color: #fecc00;
}
.inspiration-content-modal__polarlight-link {
  font-weight: 700;
}
.inspiration-content-modal__value {
  padding: 0 1.5rem;
}
.inspiration-content-modal__asset {
  margin-bottom: 1rem;
}
.inspiration-content-modal__asset .seo-image__image {
  width: 90%;
  margin: 0 auto;
  display: block;
}
.inspiration-content-modal .button {
  display: block;
}

.product-landing-page-use-case-modal {
  position: relative;
}
.product-landing-page-use-case-modal__polarlight {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  -webkit-box-flex: 2;
      -ms-flex-positive: 2;
          flex-grow: 2;
}
.product-landing-page-use-case-modal__polarlight-icon {
  font-size: 2rem;
  margin-top: -0.75rem;
  color: #fecc00;
}
.product-landing-page-use-case-modal__polarlight-link {
  font-weight: 700;
}
.product-landing-page-use-case-modal__value {
  padding: 0 1.5rem;
}
.product-landing-page-use-case-modal__asset {
  margin-bottom: 1rem;
}
.product-landing-page-use-case-modal__asset .seo-image__image {
  width: 90%;
  margin: 0 auto;
  display: block;
}
.product-landing-page-use-case-modal .button {
  display: block;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-list-slider {
  margin-bottom: 10px;
  margin-bottom: 0.6666666667rem;
  padding-bottom: 10px;
  padding-bottom: 0.6666666667rem;
}
.product-list-slider .headline {
  font-size: 2rem;
}
@media only screen and (min-width: 550px) {
  .product-list-slider .headline {
    font-size: 2.4rem;
  }
}
.product-list-slider .product-box__price .price__amount-label {
  display: inline-block;
}
@media only screen and (min-width: 1024px) and (max-width: 1260px) {
  .product-list-slider .product-box {
    max-width: none;
  }
}
.product-list-slider .slick-carousel .slick--listing.slick-arrow {
  font-size: 2rem;
  opacity: 1;
}
.product-list-slider .slick-carousel .slick--listing.slick-prev {
  margin-top: 0;
}
.product-list-slider .slick-carousel .slick--listing.slick-next {
  margin-top: -2rem;
}
.product-list-slider .icon:not(.icon--caret-down):not(.icon--inhouse-production):not(.icon--energy) {
  width: 100%;
  height: 100%;
  color: #4b4b4d;
}
.product-list-slider .icon:not(.icon--caret-down):not(.icon--inhouse-production):not(.icon--energy)::before {
  width: 100%;
  height: 100%;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-listing-box {
  border-width: 1px;
  border-style: solid;
  border-color: #ececec;
  display: block;
  overflow: hidden;
  height: 100%;
}
.product-listing-box__container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  height: auto;
  position: relative;
  padding: 1.5rem;
}
@media only screen and (min-width: 768px) {
  .product-listing-box__container {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    -webkit-box-align: stretch;
        -ms-flex-align: stretch;
            align-items: stretch;
  }
}
.product-listing-box__image-wrap {
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
  width: 10.6666666667rem;
  padding-right: 1rem;
}
.product-listing-box__image-wrap .thumbnail {
  height: 100%;
}
.product-listing-box__image-wrap .thumbnail__image {
  margin: 0 auto;
}
.product-listing-box__image-and-product-info {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
}
@media only screen and (max-width: 767px) {
  .product-listing-box__image-and-product-info {
    width: 100%;
  }
}
.product-listing-box__product-info {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: start;
      -ms-flex-align: start;
          align-items: flex-start;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
}
.product-listing-box__buy-info {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: end;
      -ms-flex-align: end;
          align-items: flex-end;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
}
@media only screen and (max-width: 767px) {
  .product-listing-box__buy-info {
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
  }
}
.product-listing-box__price-and-availability-info {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
}
.product-listing-box__price-and-availability-info .product-listing-box__availability {
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
}
@media only screen and (min-width: 768px) {
  .product-listing-box__price-and-availability-info {
    -webkit-box-align: end;
        -ms-flex-align: end;
            align-items: flex-end;
  }
  .product-listing-box__price-and-availability-info .product-listing-box__availability {
    -webkit-box-pack: end;
        -ms-flex-pack: end;
            justify-content: flex-end;
  }
}
@media only screen and (max-width: 767px) {
  .product-listing-box__add-to-cart {
    width: 100%;
  }
  .product-listing-box__add-to-cart .select-button {
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .product-listing-box__add-to-cart .select-button .button {
    -webkit-box-flex: 1;
        -ms-flex: 1;
            flex: 1;
  }
}
.product-listing-box__energy-label-and-sku-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  -webkit-box-align: start;
      -ms-flex-align: start;
          align-items: flex-start;
}
.product-listing-box__energy-label svg {
  width: 2.3333333333rem;
  height: 2.3333333333rem;
}
.product-listing-box__name {
  -ms-word-break: break-all;
  word-break: break-all;
  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
  word-break: break-word;
  -ms-hyphens: auto;
      hyphens: auto;
  text-transform: uppercase;
  font-size: 1.2rem;
  font-weight: 700;
}
.product-listing-box__description, .product-listing-box__sku {
  margin-top: 0;
  font-size: 0.9333333333rem;
}
.product-listing-box__vat-label {
  line-height: 1.8;
}
.product-listing-box .price__amount {
  line-height: 1.8;
}
.product-listing-box__availability {
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
  line-height: 1.8;
}
.product-listing-box__availability .availability__dots {
  width: auto;
}
.product-listing-box__availability .availability__label {
  margin-left: 7.5px;
  margin-left: 0.5rem;
}
.product-listing-box__actions-container {
  background-color: #ececec;
  color: #4b4b4d;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
  padding: 1.5rem;
}
.product-listing-box__actions-container svg {
  fill: #4b4b4d;
}
.product-listing-box__actions-container .icon-button {
  margin: 0 0 0 0.6666666667rem;
}
.product-listing-box__variant-info {
  border-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  border-radius: 10px;
  color: #b2b2b2;
  margin-top: 1rem;
  padding: 0.4rem 1.3333333333rem;
  font-size: 0.8rem;
}
.product-listing-box .slick-carousel {
  height: 100%;
}
.product-listing-box .slick-carousel__container,
.product-listing-box .slick-carousel .slick-list,
.product-listing-box .slick-carousel .slick-track,
.product-listing-box .slick-carousel .slick-slide {
  height: 100%;
}
.product-listing-box .slick-carousel .slick-slide {
  margin: 0 1rem;
}
.product-listing-box .slick-carousel .nav-arrow {
  border-radius: 0;
  width: 60px;
  width: 4rem;
  height: 45px;
  height: 3rem;
  top: unset;
  bottom: -1rem;
  background: rgba(255, 255, 255, 0.5);
  opacity: 1;
  font-size: 4rem;
  line-height: 0.5;
}
@media only screen and (min-width: 768px) {
  .product-listing-box .slick-carousel .nav-arrow {
    bottom: -2rem;
  }
}
@media only screen and (min-width: 1024px) {
  .product-listing-box .slick-carousel .nav-arrow {
    font-size: 2rem;
    width: 30px;
    width: 2rem;
    height: 30px;
    height: 2rem;
    bottom: -1rem;
  }
}
.product-listing-box .slick-carousel .nav-arrow--prev {
  left: 1rem;
}
.product-listing-box .slick-carousel .nav-arrow--next {
  right: 1rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.quantity-counter {
  padding: 0.5333333333rem 0.6666666667rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  background: #1a171b;
}
.quantity-counter__input {
  margin: 0;
  padding: 0;
  font-size: 1.0666666667rem;
  line-height: normal;
  width: 3.0666666667rem;
  text-align: center;
  border: none;
  background: none;
}
.quantity-counter__input::-webkit-inner-spin-button {
  -webkit-appearance: none;
          appearance: none;
}
.quantity-counter__button {
  width: 1.8666666667rem;
  height: 1.8666666667rem;
  border-radius: 10px;
  background-color: #fff;
  -webkit-box-shadow: 0 0.6666666667rem 0.6666666667rem 0 rgba(0, 0, 0, 0.2), 0 0.2rem 0.2rem 0 rgba(0, 0, 0, 0.2);
          box-shadow: 0 0.6666666667rem 0.6666666667rem 0 rgba(0, 0, 0, 0.2), 0 0.2rem 0.2rem 0 rgba(0, 0, 0, 0.2);
  line-height: 0;
  font-size: 0;
  cursor: pointer;
  position: relative;
  -webkit-transition: background 250ms ease-in-out;
  transition: background 250ms ease-in-out;
}
.quantity-counter__button--decrement::before, .quantity-counter__button--increment::before, .quantity-counter__button--increment::after {
  content: "";
  position: absolute;
  left: 50%;
  top: 50%;
  -webkit-transform: translate(-50%, -50%);
          transform: translate(-50%, -50%);
  width: 0.6rem;
  height: 0.1333333333rem;
  background: #b2b2b2;
  -webkit-transition: background 250ms ease-in-out;
  transition: background 250ms ease-in-out;
}
.quantity-counter__button--increment::after {
  width: 0.1333333333rem;
  height: 0.6rem;
}
.quantity-counter__button:hover {
  background: #fecc00;
}
.quantity-counter__button:hover::before, .quantity-counter__button:hover::after {
  background: #fff;
}
.quantity-counter__button--disabled {
  background: #fff;
  cursor: not-allowed;
  -webkit-box-shadow: 0 0.2rem 0.2rem 0 rgba(0, 0, 0, 0.2);
          box-shadow: 0 0.2rem 0.2rem 0 rgba(0, 0, 0, 0.2);
}
.quantity-counter__button--disabled::before, .quantity-counter__button--disabled::after {
  background: #4b4b4d;
}
.quantity-counter__button--disabled:hover, .quantity-counter__button--disabled:focus {
  background: #fff;
  /* stylelint-disable-next-line max-nesting-depth */
}
.quantity-counter__button--disabled:hover::before, .quantity-counter__button--disabled:hover::after, .quantity-counter__button--disabled:focus::before, .quantity-counter__button--disabled:focus::after {
  background: #4b4b4d;
}
.quantity-counter--right-space {
  margin-right: 0.6666666667rem;
}
@media only screen and (min-width: 768px) {
  .quantity-counter--cart {
    padding-top: 0.6666666667rem;
    padding-bottom: 0.8rem;
  }
}
.quantity-counter--shopping-list {
  padding-top: 0.6666666667rem;
  padding-bottom: 0.8rem;
  margin-bottom: 1.3333333333rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.quantity-input-select {
  height: 50px;
  height: 3.3333333333rem;
  width: 75px;
  width: 5rem;
  position: relative;
}
@media only screen and (max-width: 375px) {
  .quantity-input-select {
    width: 85px;
    width: 5.6666666667rem;
  }
}
@media only screen and (min-width: 768px) {
  .quantity-input-select {
    width: 85px;
    width: 5.6666666667rem;
  }
}
.quantity-input-select label {
  height: 100%;
}
.quantity-input-select__input, .quantity-input-select__select, .quantity-input-select__save {
  position: absolute;
}
.quantity-input-select__input.hidden, .quantity-input-select__select.hidden, .quantity-input-select__save.hidden {
  display: none;
}
.quantity-input-select__input, .quantity-input-select__select {
  width: 100%;
  left: 0;
}
.quantity-input-select__input {
  height: 100%;
}
.quantity-input-select__input::-webkit-inner-spin-button {
  -webkit-appearance: none;
          appearance: none;
}
.quantity-input-select__input::-webkit-calendar-picker-indicator {
  opacity: 1;
}
.quantity-input-select__select, .quantity-input-select__save {
  display: none;
  cursor: pointer;
}
.quantity-input-select__select {
  padding: 0 0.9333333333rem;
}
.quantity-input-select__select .select__select {
  cursor: pointer;
}
.quantity-input-select__select.visible {
  display: block;
}
.quantity-input-select__save {
  height: 50px;
  height: 3.3333333333rem;
  right: 0;
  margin: 0;
}
.quantity-input-select__save.visible {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
}
.quantity-input-select--shopping-list {
  padding-top: 0.6666666667rem;
  padding-bottom: 0.8rem;
  margin-bottom: 1.3333333333rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
/*! nouislider - 11.1.0 - 2018-04-02 11:18:13 */
/* Functional styling;
 * These styles are required for noUiSlider to function.
 * You don't need to change these rules to apply your design.
 */
.noUi-target,
.noUi-target * {
  -webkit-touch-callout: none;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
  -webkit-user-select: none;
  -ms-touch-action: none;
  touch-action: none;
  -ms-user-select: none;
  -moz-user-select: none;
  user-select: none;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
}

.noUi-target {
  position: relative;
  direction: ltr;
}

.noUi-base,
.noUi-connects {
  width: 100%;
  height: 100%;
  position: relative;
  z-index: 1;
}

/* Wrapper for all connect elements.
 */
.noUi-connects {
  overflow: hidden;
  z-index: 0;
}

.noUi-connect,
.noUi-origin {
  will-change: transform;
  position: absolute;
  z-index: 1;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
  -webkit-transform-origin: 0 0;
  transform-origin: 0 0;
}

/* Offset direction
 */
html:not([dir=rtl]) .noUi-horizontal .noUi-origin {
  left: auto;
  right: 0;
}

/* Give origins 0 height/width so they don't interfere with clicking the
 * connect elements.
 */
.noUi-vertical .noUi-origin {
  width: 0;
}

.noUi-horizontal .noUi-origin {
  height: 0;
}

.noUi-handle {
  position: absolute;
}

.noUi-state-tap .noUi-connect,
.noUi-state-tap .noUi-origin {
  -webkit-transition: transform 0.3s;
  -webkit-transition: -webkit-transform 0.3s;
  transition: -webkit-transform 0.3s;
  transition: transform 0.3s;
  transition: transform 0.3s, -webkit-transform 0.3s;
}

.noUi-state-drag * {
  cursor: inherit !important;
}

/* Slider size and handle placement;
 */
.noUi-horizontal {
  height: 18px;
}

.noUi-horizontal .noUi-handle {
  width: 34px;
  height: 28px;
  left: -17px;
  top: -6px;
}

.noUi-vertical {
  width: 18px;
}

.noUi-vertical .noUi-handle {
  width: 28px;
  height: 34px;
  left: -6px;
  top: -17px;
}

html:not([dir=rtl]) .noUi-horizontal .noUi-handle {
  right: -17px;
  left: auto;
}

/* Styling;
 * Giving the connect element a border radius causes issues with using transform: scale
 */
.noUi-target {
  background: #FAFAFA;
  border-radius: 4px;
  border: 1px solid #D3D3D3;
  -webkit-box-shadow: inset 0 1px 1px #F0F0F0, 0 3px 6px -5px #BBB;
          box-shadow: inset 0 1px 1px #F0F0F0, 0 3px 6px -5px #BBB;
}

.noUi-connects {
  border-radius: 3px;
}

.noUi-connect {
  background: #3FB8AF;
}

/* Handles and cursors;
 */
.noUi-draggable {
  cursor: ew-resize;
}

.noUi-vertical .noUi-draggable {
  cursor: ns-resize;
}

.noUi-handle {
  border: 1px solid #D9D9D9;
  border-radius: 3px;
  background: #FFF;
  cursor: default;
  -webkit-box-shadow: inset 0 0 1px #FFF, inset 0 1px 7px #EBEBEB, 0 3px 6px -3px #BBB;
          box-shadow: inset 0 0 1px #FFF, inset 0 1px 7px #EBEBEB, 0 3px 6px -3px #BBB;
}

.noUi-active {
  -webkit-box-shadow: inset 0 0 1px #FFF, inset 0 1px 7px #DDD, 0 3px 6px -3px #BBB;
          box-shadow: inset 0 0 1px #FFF, inset 0 1px 7px #DDD, 0 3px 6px -3px #BBB;
}

/* Handle stripes;
 */
.noUi-handle:before,
.noUi-handle:after {
  content: "";
  display: block;
  position: absolute;
  height: 14px;
  width: 1px;
  background: #E8E7E6;
  left: 14px;
  top: 6px;
}

.noUi-handle:after {
  left: 17px;
}

.noUi-vertical .noUi-handle:before,
.noUi-vertical .noUi-handle:after {
  width: 14px;
  height: 1px;
  left: 6px;
  top: 14px;
}

.noUi-vertical .noUi-handle:after {
  top: 17px;
}

/* Disabled state;
 */
[disabled] .noUi-connect {
  background: #B8B8B8;
}

[disabled].noUi-target,
[disabled].noUi-handle,
[disabled] .noUi-handle {
  cursor: not-allowed;
}

/* Base;
 *
 */
.noUi-pips,
.noUi-pips * {
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
}

.noUi-pips {
  position: absolute;
  color: #999;
}

/* Values;
 *
 */
.noUi-value {
  position: absolute;
  white-space: nowrap;
  text-align: center;
}

.noUi-value-sub {
  color: #ccc;
  font-size: 10px;
}

/* Markings;
 *
 */
.noUi-marker {
  position: absolute;
  background: #CCC;
}

.noUi-marker-sub {
  background: #AAA;
}

.noUi-marker-large {
  background: #AAA;
}

/* Horizontal layout;
 *
 */
.noUi-pips-horizontal {
  padding: 10px 0;
  height: 80px;
  top: 100%;
  left: 0;
  width: 100%;
}

.noUi-value-horizontal {
  -webkit-transform: translate(-50%, 50%);
  transform: translate(-50%, 50%);
}

.noUi-rtl .noUi-value-horizontal {
  -webkit-transform: translate(50%, 50%);
  transform: translate(50%, 50%);
}

.noUi-marker-horizontal.noUi-marker {
  margin-left: -1px;
  width: 2px;
  height: 5px;
}

.noUi-marker-horizontal.noUi-marker-sub {
  height: 10px;
}

.noUi-marker-horizontal.noUi-marker-large {
  height: 15px;
}

/* Vertical layout;
 *
 */
.noUi-pips-vertical {
  padding: 0 10px;
  height: 100%;
  top: 0;
  left: 100%;
}

.noUi-value-vertical {
  -webkit-transform: translate(0, -50%);
  transform: translate(0, -50%, 0);
  padding-left: 25px;
}

.noUi-rtl .noUi-value-vertical {
  -webkit-transform: translate(0, 50%);
  transform: translate(0, 50%);
}

.noUi-marker-vertical.noUi-marker {
  width: 5px;
  height: 2px;
  margin-top: -1px;
}

.noUi-marker-vertical.noUi-marker-sub {
  width: 10px;
}

.noUi-marker-vertical.noUi-marker-large {
  width: 15px;
}

.noUi-tooltip {
  display: block;
  position: absolute;
  border: 1px solid #D9D9D9;
  border-radius: 3px;
  background: #fff;
  color: #000;
  padding: 5px;
  text-align: center;
  white-space: nowrap;
}

.noUi-horizontal .noUi-tooltip {
  -webkit-transform: translate(-50%, 0);
  transform: translate(-50%, 0);
  left: 50%;
  bottom: 120%;
}

.noUi-vertical .noUi-tooltip {
  -webkit-transform: translate(0, -50%);
  transform: translate(0, -50%);
  top: 50%;
  right: 120%;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.range-slider {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: reverse;
      -ms-flex-direction: column-reverse;
          flex-direction: column-reverse;
  border: none;
  background: none;
  height: auto;
  -webkit-box-shadow: none;
          box-shadow: none;
  margin: 0 7px;
}
.range-slider .noUi-base {
  position: relative;
  z-index: 1;
  padding: 6px 0;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  cursor: pointer;
}
.range-slider .noUi-connects {
  background-color: #d0d0d0;
  height: 2px;
  margin: 0 -7px;
  width: calc(100% + 14px);
}
.range-slider .noUi-connect {
  background-color: #fecc00;
}
.range-slider .noUi-handle {
  -webkit-transition: -webkit-transform 250ms ease-in-out;
  transition: -webkit-transform 250ms ease-in-out;
  transition: transform 250ms ease-in-out;
  transition: transform 250ms ease-in-out, -webkit-transform 250ms ease-in-out;
  width: 14px;
  height: 14px;
  border-radius: 7px;
  -webkit-box-shadow: none;
          box-shadow: none;
  border: none;
  background-color: #fecc00;
}
.range-slider .noUi-handle::before, .range-slider .noUi-handle::after {
  display: none;
}
.range-slider .noUi-handle:hover {
  cursor: pointer;
  -webkit-transform: scale(1.3);
          transform: scale(1.3);
}
.range-slider.noUi-horizontal .noUi-handle {
  top: 0;
}
html:not([dir=rtl]) .range-slider.noUi-horizontal .noUi-handle {
  right: 0;
  margin-right: -7px;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.recommended-product-box {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  background-color: #fff;
  color: #4b4b4d;
  padding: 1.3333333333rem 0.6666666667rem;
}
.recommended-product-box svg {
  fill: #4b4b4d;
}
.recommended-product-box__image {
  width: 5.3333333333rem;
  min-width: 5.3333333333rem;
}
.recommended-product-box__details-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
}
.recommended-product-box__details-container--with-left-padding {
  padding-left: 0.75rem;
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .recommended-product-box__details-container {
    width: 100%;
  }
  .recommended-product-box__details-container > div {
    width: 100%;
  }
}
.recommended-product-box__description {
  font-size: 0.9333333333rem;
  padding-top: 0.25rem;
  padding-bottom: 0.5rem;
  -ms-word-break: break-all;
  word-break: break-all;
  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
  word-break: break-word;
  -ms-hyphens: auto;
      hyphens: auto;
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .recommended-product-box__description {
    width: 100%;
  }
}
.recommended-product-box__price {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
.recommended-product-box__price .price__amount {
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.recommended-product-box__price .price__amount-label {
  display: inline-block;
  font-size: 0.9333333333rem;
  color: #4b4b4d;
}
.recommended-product-box__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
}
.recommended-product-box__headline {
  display: block;
  font-size: 1.0666666667rem;
  line-height: 1.4;
  margin-right: 0.5rem;
  -ms-word-break: break-all;
  word-break: break-all;
  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
  word-break: break-word;
  -ms-hyphens: auto;
      hyphens: auto;
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .recommended-product-box__headline {
    width: 100%;
  }
}
.recommended-product-box__go-to-details-button {
  -ms-word-break: break-all;
  word-break: break-all;
  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
  word-break: break-word;
  -ms-hyphens: auto;
      hyphens: auto;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
}
@media only screen and (min-width: 768px) {
  .recommended-product-box__headline {
    font-size: 1.2rem;
    line-height: 1.6;
  }
}
.recommended-product-box .availability {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-align: start;
      -ms-flex-align: start;
          align-items: flex-start;
}
.recommended-product-box .availability__label {
  margin-left: 0;
  line-height: 2;
}
.recommended-product-box .energy-label {
  -webkit-box-pack: left;
      -ms-flex-pack: left;
          justify-content: left;
}
.recommended-product-box .energy-label .data-sheet-link {
  padding-right: 0;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.recommended-product-listing {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
.recommended-product-listing__top {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  padding: 0.25rem 1rem;
}
.recommended-product-listing__top-container {
  padding: 0 1rem;
}
.recommended-product-listing__headline {
  text-overflow: ellipsis;
  overflow: hidden;
  white-space: nowrap;
  -webkit-box-flex: 2;
      -ms-flex: 2;
          flex: 2;
  min-width: 0;
}
.recommended-product-listing__show-all-button-container {
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
}
.recommended-product-listing__show-all-button {
  -ms-word-break: break-all;
  word-break: break-all;
  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
  word-break: break-word;
  -ms-hyphens: auto;
      hyphens: auto;
  min-width: 0;
}
.recommended-product-listing__products-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .recommended-product-listing__products-container {
    /* stylelint-disable declaration-no-important */
    -ms-flex-negative: 0 !important;
        flex-shrink: 0 !important;
    -ms-flex-preferred-size: auto !important;
        flex-basis: auto !important;
    /* stylelint-enable declaration-no-important */
  }
}
@media only screen and (max-width: 550px) {
  .recommended-product-listing__products-container {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }
}
@media only screen and (min-width: 768px) {
  .recommended-product-listing__products-container {
    padding: 0 1rem;
  }
}
.recommended-product-listing__recommended-product-box-container {
  padding: 1rem 0.5rem;
}
@media only screen and (max-width: 0) {
  .recommended-product-listing__recommended-product-box-container {
    max-width: 18.6666666667rem;
  }
}
@media only screen and (max-width: 550px) {
  .recommended-product-listing__recommended-product-box-container {
    min-width: 18.6666666667rem;
  }
}
@media only screen and (min-width: 551px) {
  .recommended-product-listing__recommended-product-box-container {
    -webkit-box-flex: 1;
        -ms-flex: 1;
            flex: 1;
  }
}
@media only screen and (max-width: 768px) {
  .recommended-product-listing__recommended-product-box-container:first-child {
    padding-left: 1rem;
  }
  .recommended-product-listing__recommended-product-box-container:last-child {
    padding-right: 1rem;
  }
}
@media only screen and (min-width: 768px) {
  .recommended-product-listing__recommended-product-box-container {
    -webkit-box-flex: 1;
        -ms-flex: 1;
            flex: 1;
  }
  .recommended-product-listing__recommended-product-box-container:first-child {
    padding-left: 0;
  }
  .recommended-product-listing__recommended-product-box-container:last-child {
    padding-right: 0;
  }
}
.recommended-product-listing__recommended-product-box {
  height: 100%;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.scroll-to-top {
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  position: sticky;
  bottom: 0;
  left: 100%;
  padding: 1rem;
  z-index: 700;
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .scroll-to-top {
    position: fixed;
    right: 0;
    left: 0;
  }
  .scroll-to-top .label {
    background-color: #fff;
    color: #4b4b4d;
    padding: 0.25rem;
  }
  .scroll-to-top .label svg {
    fill: #4b4b4d;
  }
}
.scroll-to-top__scroll-up {
  width: auto;
  height: auto;
}
.scroll-to-top .label {
  display: none;
}
@media only screen and (min-width: 1400px) {
  .scroll-to-top .label {
    display: block;
  }
}
.scroll-to-top .svg {
  width: 2rem;
  height: 2rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.select-button {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
.select-button .quantity-input-select {
  height: auto;
}
.select-button .quantity-input-select .select {
  border-radius: 0;
  border-bottom-left-radius: 10px;
  border-top-left-radius: 10px;
}
.select-button .button {
  border-radius: 0;
  border-bottom-right-radius: 10px;
  border-top-right-radius: 10px;
}
.select-button .input {
  -webkit-box-flex: 2;
      -ms-flex-positive: 2;
          flex-grow: 2;
  border-radius: 0;
  border-bottom-left-radius: 10px;
  border-top-left-radius: 10px;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
/* Slider */
.slick-slider {
  position: relative;
  display: block;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -ms-touch-action: pan-y;
  touch-action: pan-y;
  -webkit-tap-highlight-color: transparent;
}

.slick-list {
  position: relative;
  overflow: hidden;
  display: block;
  margin: 0;
  padding: 0;
}
.slick-list:focus {
  outline: none;
}
.slick-list.dragging {
  cursor: pointer;
  cursor: hand;
}

.slick-slider .slick-track,
.slick-slider .slick-list {
  -webkit-transform: translate3d(0, 0, 0);
  transform: translate3d(0, 0, 0);
}

.slick-track {
  position: relative;
  left: 0;
  top: 0;
  display: block;
  margin-left: auto;
  margin-right: auto;
}
.slick-track:before, .slick-track:after {
  content: "";
  display: table;
}
.slick-track:after {
  clear: both;
}
.slick-loading .slick-track {
  visibility: hidden;
}

.slick-slide {
  float: left;
  height: 100%;
  min-height: 1px;
  display: none;
}
[dir=rtl] .slick-slide {
  float: right;
}
.slick-slide img {
  display: block;
}
.slick-slide.slick-loading img {
  display: none;
}
.slick-slide.dragging img {
  pointer-events: none;
}
.slick-initialized .slick-slide {
  display: block;
}
.slick-loading .slick-slide {
  visibility: hidden;
}
.slick-vertical .slick-slide {
  display: block;
  height: auto;
  border: 1px solid transparent;
}

.slick-arrow.slick-hidden {
  display: none;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.slick-carousel__container {
  max-height: 26.2666666667rem;
  opacity: 0;
  -webkit-transition: opacity 0.5s ease-in-out;
  transition: opacity 0.5s ease-in-out;
}
.slick-carousel__container--is-inited {
  opacity: 1;
  max-height: none;
}
.slick-carousel .slick-track,
.slick-carousel .slick-list {
  -webkit-transition-delay: 250ms;
          transition-delay: 250ms;
}
.slick-carousel .slick-slide img.is-hidden {
  display: none;
}
.slick-carousel--full-width {
  margin-left: -15px;
  margin-right: -15px;
}
.slick-carousel--full-width.slick-carousel--equal-height {
  margin-left: -0.6rem;
  margin-right: -0.6rem;
}
@media only screen and (min-width: 768px) {
  .slick-carousel--full-width.slick-carousel--equal-height {
    margin-left: -15px;
    margin-right: -15px;
  }
}
.slick-carousel--full-width.slick-carousel--equal-height:not(.slick-carousel--listing) {
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
@media only screen and (min-width: 1024px) and (max-width: 1259px) {
  .slick-carousel--full-width.slick-carousel--equal-height:not(.slick-carousel--listing) {
    margin-left: 2rem;
    margin-right: 2rem;
  }
  .slick-carousel--full-width.slick-carousel--equal-height:not(.slick-carousel--listing) .slick-prev {
    left: -2rem;
  }
  .slick-carousel--full-width.slick-carousel--equal-height:not(.slick-carousel--listing) .slick-next {
    right: -2rem;
  }
}
.slick-carousel--full-width.slick-carousel--product-family {
  margin: 0;
}
@media only screen and (min-width: 1024px) {
  .slick-carousel--full-width.slick-carousel--product-family {
    margin: 0 0.5rem;
  }
}
.slick-carousel--equal-height .slick-track {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
.slick-carousel--equal-height .slick-slide {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  height: auto;
  margin: 0 0.6rem;
}
@media only screen and (min-width: 768px) {
  .slick-carousel--equal-height .slick-slide {
    margin: 0 15px;
  }
}
.slick-carousel--equal-height .slick-slide > div {
  max-width: 100%;
  width: 100%;
}
.slick-carousel--stretch .slick-slide {
  margin: 0;
}
.slick-carousel--stretch .slick-list {
  padding: 0 15px;
}
.slick-carousel--product-set {
  margin: 0 -0.6666666667rem;
}
.slick-carousel--product-set .slick-slide {
  margin: 0 0.6666666667rem;
}
@media only screen and (min-width: 768px) {
  .slick-carousel--product-set {
    margin: 0;
  }
  .slick-carousel--product-set .slick-slide {
    margin: 0;
  }
}
.slick-carousel--product-set-widget .slick-slide {
  min-height: 26.6666666667rem;
  width: 18.6666666667rem;
  margin: 0 0.6666666667rem;
}
@media only screen and (min-width: 768px) {
  .slick-carousel--product-set-widget .slick-slide {
    margin: 0 15px;
  }
}
.slick-carousel--cross-selling .slick-slide {
  margin: 0 0.6666666667rem;
}
@media only screen and (min-width: 1024px) {
  .slick-carousel--product-family {
    margin: 0 0.5rem;
  }
}
.slick-carousel--product-family .slick-track {
  margin: 0;
}
.slick-carousel--product-family .slick-dots li {
  border-color: #929292;
  background: #929292;
}
.slick-carousel--jumbotron {
  display: block;
  min-height: 26rem;
}
@media only screen and (min-width: 768px) {
  .slick-carousel--jumbotron {
    min-height: 33.6666666667rem;
  }
}
.slick-carousel--jumbotron .slick-slide {
  margin: 0 0.0666666667rem;
}
@media only screen and (min-width: 768px) {
  .slick-carousel--jumbotron .slick-slide {
    margin-left: 0.3333333333rem;
    margin-right: 0.3333333333rem;
  }
}
.slick-carousel--jumbotron .slick-dots {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  margin-top: 1.2rem;
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
@media only screen and (min-width: 768px) {
  .slick-carousel--jumbotron .slick-dots {
    margin-top: 1.6rem;
  }
}
.slick-carousel--jumbotron .slick-dots li {
  display: block;
  position: relative;
  margin: 0 0.4rem;
  width: 0.6666666667rem;
  height: 0.6666666667rem;
  background: rgba(255, 255, 255, 0);
  border-radius: 50%;
  font-size: 0;
}
.slick-carousel--jumbotron .slick-dots li::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
          transform: translate(-50%, -50%);
  width: 0.3333333333rem;
  height: 0.3333333333rem;
  background: #dadada;
  border-radius: 50%;
}
@media only screen and (min-width: 768px) {
  .slick-carousel--jumbotron .slick-dots li {
    margin-top: 0.3rem;
    margin-bottom: 0.3rem;
  }
}
.slick-carousel--jumbotron .slick-dots li:hover {
  cursor: pointer;
}
.slick-carousel--jumbotron .slick-dots li.slick-active::after {
  width: 0.6666666667rem;
  height: 0.6666666667rem;
  background: rgba(255, 255, 255, 0);
  border: 2px solid #929292;
}
.slick-carousel .slick-dots {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  margin-top: 1.2rem;
}
.slick-carousel .slick-dots li {
  display: block;
  margin: 0 0.5rem;
  width: 0.3333333333rem;
  height: 0.3333333333rem;
  background: #dadada;
  border-width: 0.3333333333rem;
  border-style: solid;
  border-color: #ececec;
  border-radius: 9999px;
  font-size: 0;
}
.slick-carousel .slick-dots li:hover {
  cursor: pointer;
}
.slick-carousel .slick-dots li.slick-active {
  width: 0.6666666667rem;
  height: 0.6666666667rem;
  background: rgba(255, 255, 255, 0);
  border-width: 0.4666666667rem;
  border-style: solid;
  border-color: #fecc00;
}
.slick-carousel .slick-arrow {
  position: absolute;
  top: 6.3333333333rem;
  font-size: 0;
  width: 2rem;
  height: 2rem;
  background-size: 1rem;
  border-radius: 50%;
  z-index: 350;
  opacity: 0.5;
  -webkit-transform: translateY(-50%);
          transform: translateY(-50%);
}
@media only screen and (min-width: 768px) {
  .slick-carousel .slick-arrow {
    margin-top: -2rem;
    top: 50%;
  }
}
.slick-carousel .slick-arrow:hover {
  opacity: 1;
  cursor: pointer;
}
.slick-carousel .slick-arrow .icon--caret-right {
  width: 100%;
  text-align: left;
}
.slick-carousel .slick-arrow .icon--caret-left {
  width: 100%;
  text-align: right;
}
.slick-carousel .slick-prev {
  left: 0.6rem;
  -webkit-transform: rotate(180deg);
          transform: rotate(180deg);
}
@media only screen and (min-width: 768px) {
  .slick-carousel .slick-prev {
    left: 1rem;
  }
}
@media only screen and (min-width: 1260px) {
  .slick-carousel .slick-prev {
    left: -2rem;
  }
}
.slick-carousel .slick-next {
  right: 0.6rem;
  margin-top: 1rem;
}
@media only screen and (min-width: 768px) {
  .slick-carousel .slick-next {
    margin-top: -1rem;
    right: 1rem;
  }
}
@media only screen and (min-width: 1260px) {
  .slick-carousel .slick-next {
    right: -2rem;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.social-share {
  padding-top: 1.3333333333rem;
}
.social-share__text {
  color: #000;
  padding-right: 1.3333333333rem;
  line-height: 3rem;
}
.social-share__mail .icon-button__icon::before, .social-share__facebook .icon-button__icon::before, .social-share__twitter .icon-button__icon::before {
  font-size: 1.5rem;
}
.social-share .icon-button__icon {
  width: 3rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.content-element {
  margin-bottom: 2rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.tab {
  position: relative;
  width: 100%;
}
@media only screen and (max-width: 767px) {
  .tab:not(:last-child) {
    border-bottom-width: 2px;
    border-style: solid;
    border-color: #ececec;
  }
}
.tab::before {
  height: 3.5rem;
  line-height: 3.5rem;
  font-size: 1.4666666667rem;
}
.tab::after {
  content: attr(data-title);
  width: 100%;
  padding: 1rem 0;
  font-weight: 700;
  display: inline-block;
  position: absolute;
  top: 0;
  left: 2rem;
  cursor: pointer;
}
.tab__text {
  opacity: 0;
  height: 0;
}
@media only screen and (min-width: 768px) {
  .tab__text {
    opacity: 1;
    height: auto;
    padding: 1.5rem;
  }
}
.tab.active .tab__text {
  opacity: 1;
  height: auto;
  padding-bottom: 1.5rem;
}
.tab.active::before {
  font-size: 1.6666666667rem;
  line-height: 3.8rem;
}
@media only screen and (min-width: 768px) {
  .tab {
    border-width: 1px;
    border-style: solid;
    border-color: #d0d0d0;
  }
  .tab::before, .tab::after {
    display: none;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.table-action-list {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  padding-top: 15px;
  padding-bottom: 9px;
  margin: 0 -0.2666666667rem;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
}
@media only screen and (min-width: 768px) {
  .table-action-list {
    width: 100%;
    margin: 0;
    -webkit-box-pack: end;
        -ms-flex-pack: end;
            justify-content: flex-end;
  }
}
.table-action-list--shopping-list {
  display: block;
  background-color: #1a171b;
  padding: 0.6rem 1.3333333333rem;
  margin: 0.5333333333rem 0 0;
}
@media only screen and (min-width: 768px) {
  .table-action-list--shopping-list {
    padding: 0;
    background-color: rgba(255, 255, 255, 0);
  }
}
.table-action-list__inner {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  margin: 0 -0.2666666667rem;
}
.table-action-list__item {
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  padding: 0 0.2666666667rem;
}
@media only screen and (min-width: 768px) {
  .table-action-list__item {
    -webkit-box-flex: 0;
        -ms-flex-positive: 0;
            flex-grow: 0;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.text-field {
  position: relative;
}
.text-field__input {
  width: 100%;
}
.text-field__input--focus-border-main:focus {
  border-color: #fecc00;
}
.text-field__input--error {
  border-color: #e32213;
}
.text-field__label {
  color: #b2b2b2;
  pointer-events: none;
  z-index: 1;
  position: absolute;
  font-size: 0.9333333333rem;
  -webkit-transform: translate(1.3333333333rem, 0.9333333333rem);
          transform: translate(1.3333333333rem, 0.9333333333rem);
  -webkit-transition: color 200ms cubic-bezier(0, 0, 0.2, 1) 0ms, -webkit-transform 200ms cubic-bezier(0, 0, 0.2, 1) 0ms;
  transition: color 200ms cubic-bezier(0, 0, 0.2, 1) 0ms, -webkit-transform 200ms cubic-bezier(0, 0, 0.2, 1) 0ms;
  transition: color 200ms cubic-bezier(0, 0, 0.2, 1) 0ms, transform 200ms cubic-bezier(0, 0, 0.2, 1) 0ms;
  transition: color 200ms cubic-bezier(0, 0, 0.2, 1) 0ms, transform 200ms cubic-bezier(0, 0, 0.2, 1) 0ms, -webkit-transform 200ms cubic-bezier(0, 0, 0.2, 1) 0ms;
}
.text-field--has-value .text-field__label {
  background-color: #fff;
  -webkit-transform: translate(1.3333333333rem, -0.6rem);
          transform: translate(1.3333333333rem, -0.6rem);
}
.text-field--focussed .text-field__label {
  background-color: #fff;
  -webkit-transform: translate(1.3333333333rem, -0.6rem);
          transform: translate(1.3333333333rem, -0.6rem);
}
.text-field--focussed .text-field__label--focus-border-main {
  color: #fecc00;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.toggle-headline {
  position: relative;
  /* stylelint-disable-next-line declaration-no-important */
  cursor: pointer !important;
  width: 100%;
}
.toggle-headline__container {
  width: 100%;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
}
.toggle-headline__title {
  color: #4b4b4d;
}
.toggle-headline__remove {
  display: none;
}
.toggle-headline.active .toggle-headline__add {
  display: none;
}
.toggle-headline.active .toggle-headline__remove {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
.toggle-headline .icon svg {
  fill: #000;
  width: 0.9333333333rem;
  height: 1.6666666667rem;
}
.toggle-headline .icon--add svg,
.toggle-headline .icon--remove svg {
  height: 0.9333333333rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.toggle-switch {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
}
.toggle-switch__label {
  margin-right: 1rem;
}
.toggle-switch input[type=checkbox] {
  height: 0;
  width: 0;
  visibility: hidden;
}
.toggle-switch input[type=checkbox]:checked + label {
  /* stylelint-disable-next-line max-nesting-depth */
}
.toggle-switch input[type=checkbox]:checked + label::after {
  left: 100%;
  -webkit-transform: translateX(-100%);
          transform: translateX(-100%);
  background-color: #fecc00;
  color: #4b4b4d;
}
.toggle-switch input[type=checkbox]:checked + label::after svg {
  fill: #4b4b4d;
}
.toggle-switch label {
  border-radius: 10px;
  cursor: pointer;
  text-indent: -9999px;
  width: 2.6666666667rem;
  height: 0.8rem;
  background-color: #d0d0d0;
  color: #4b4b4d;
  display: inline-block;
  position: relative;
  line-height: 0.8rem;
}
.toggle-switch label svg {
  fill: #4b4b4d;
}
.toggle-switch label::after {
  border-radius: 10px;
  -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0;
          box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0;
  background-color: #b2b2b2;
  content: "";
  position: absolute;
  top: -0.3333333333rem;
  left: 0;
  width: 1.4666666667rem;
  height: 1.4666666667rem;
  -webkit-transition: 0.3s;
  transition: 0.3s;
}
.toggle-switch label:active::after {
  width: 2rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.tooltip-button {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  position: relative;
}
.tooltip-button__tooltip-container {
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
  display: none;
  position: absolute;
  z-index: 1;
  bottom: 2rem;
  right: 0;
  width: 20rem;
}
.tooltip-button__tooltip {
  -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0;
          box-shadow: rgba(0, 0, 0, 0.2) 0 1px 2px 0;
  background-color: #fff;
  color: #4b4b4d;
  display: inline-block;
  padding: 0.5rem;
  font-size: 0.9333333333rem;
  color: #4b4b4d;
}
.tooltip-button__tooltip svg {
  fill: #4b4b4d;
}
.tooltip-button__tooltip::after {
  border-width: 0.4666666667rem;
  border-style: solid;
  border-color: #fff transparent transparent transparent;
  content: "";
  position: absolute;
  bottom: -0.8666666667rem;
  right: 0.8rem;
}
.tooltip-button__tooltip li {
  margin-left: 1rem;
}
.tooltip-button button {
  min-width: 2.6666666667rem;
  height: medium-big/15rem;
  background-color: transparent;
}
.tooltip-button button .icon {
  cursor: auto;
  line-height: 1;
}
.tooltip-button button svg {
  width: 1.6666666667rem;
  height: 1.6666666667rem;
}
.tooltip-button button.tooltip-button__modal-trigger .icon {
  cursor: pointer;
}
.tooltip-button div.tooltip-button__modal-trigger .icon {
  cursor: pointer;
}
button:hover + .tooltip-button__tooltip-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  color: #4b4b4d;
}
div:hover + .tooltip-button__tooltip-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  color: #4b4b4d;
}
.tooltip-button--center .tooltip-button__tooltip-container {
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  right: 0;
  left: 0;
  -webkit-transform: translateX(-41%);
          transform: translateX(-41%);
}
.tooltip-button--center .tooltip-button__tooltip::after {
  right: 50%;
}
@media only screen and (max-width: 374px) {
  .tooltip-button--center .tooltip-button__tooltip-container {
    width: 15rem;
    -webkit-transform: translateX(-38%);
            transform: translateX(-38%);
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.user-centrics-googlemaps-overlay {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  height: 100%;
}
.user-centrics-googlemaps-overlay__container {
  width: 75%;
}
.user-centrics-googlemaps-overlay__accept-button {
  justify-self: flex-end;
  margin-top: 1rem;
}
.user-centrics-googlemaps-overlay__text a {
  font-weight: 700;
}
.user-centrics-googlemaps-overlay__button-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
}
.user-centrics-googlemaps-overlay .is-hidden {
  display: none;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
/* stylelint-disable declaration-no-important,max-nesting-depth */
.user-navigation {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
}
@media only screen and (min-width: 768px) {
  .user-navigation {
    padding-right: 1rem;
  }
}
.user-navigation__logout {
  display: inline-block;
}
.user-navigation__contact-button {
  display: inline-block;
  margin-top: 0.75rem;
}
.user-navigation__item {
  width: auto;
  max-width: 7rem;
  height: auto;
}
@media only screen and (min-width: 768px) {
  .user-navigation__item {
    position: relative;
    background-color: transparent;
    padding-bottom: 0.6666666667rem;
    z-index: 3;
  }
}
@media only screen and (min-width: 1024px) {
  .user-navigation__item {
    -webkit-box-shadow: none;
            box-shadow: none;
  }
}
@media only screen and (min-width: 550px) {
  .user-navigation__item:not(:first-child) {
    margin-left: 1.25rem;
  }
}
@media only screen and (min-width: 769px) and (min-height: 501px) {
  .user-navigation__item:hover .user-navigation__sub-nav-user.user-navigation__sub-nav {
    -webkit-transform: translateX(-50%) scale(1);
            transform: translateX(-50%) scale(1);
    opacity: 1;
  }
  .user-navigation__item:hover .user-navigation__sub-nav-user.user-navigation__sub-nav--pull-left {
    -webkit-transform: translateX(-50%) scale(1);
            transform: translateX(-50%) scale(1);
  }
}
@media only screen and (min-width: 769px) and (min-height: 501px) {
  .user-navigation__item:not(:hover) .user-navigation__sub-nav {
    -webkit-transition-delay: 0.5s;
            transition-delay: 0.5s;
    z-index: 2;
  }
}
@media only screen and (min-width: 769px) and (min-height: 501px) {
  .user-navigation__item:hover .user-navigation__sub-nav {
    -webkit-transition-delay: 0.1s;
            transition-delay: 0.1s;
    -webkit-transform: translateX(-50%) scale(1);
            transform: translateX(-50%) scale(1);
    opacity: 1;
  }
  .user-navigation__item:hover .user-navigation__sub-nav--pull-left {
    -webkit-transform: translateX(-90%) scale(1);
            transform: translateX(-90%) scale(1);
  }
}
@media only screen and (min-width: 769px) and (min-height: 501px) and (min-width: 1024px) {
  .user-navigation__item:hover .user-navigation__sub-nav--pull-left {
    -webkit-transform: translateX(-90%) scale(1);
            transform: translateX(-90%) scale(1);
  }
}
@media only screen and (min-width: 769px) and (min-height: 501px) and (min-width: 1400px) {
  .user-navigation__item:hover .user-navigation__sub-nav--pull-left {
    -webkit-transform: translateX(-90%) scale(1);
            transform: translateX(-90%) scale(1);
  }
}
.user-navigation__item--dealer {
  width: auto;
}
@media only screen and (min-width: 1024px) {
  .user-navigation__item--search {
    display: none !important;
  }
}
.user-navigation__item--search .icon-button__text {
  display: none !important;
}
.user-navigation__item--is-cart {
  position: relative;
}
.user-navigation .icon-button {
  width: auto;
  margin-right: 0;
}
@media only screen and (min-width: 550px) {
  .user-navigation .icon-button {
    height: 3.3333333333rem;
  }
}
.user-navigation .icon-button__icon {
  font-size: 2rem;
  width: 3rem;
}
.user-navigation .icon-button__icon--bg-color-main {
  background-color: #fecc00;
  color: #4b4b4d;
}
.user-navigation .icon-button__icon--bg-color-main svg {
  fill: #4b4b4d;
}
.user-navigation .icon-button__icon--user {
  padding-left: 0.4rem;
}
.user-navigation .icon-button__text {
  display: none;
}
@media only screen and (min-width: 550px) {
  .user-navigation .icon-button__text {
    display: block;
  }
}
.user-navigation .icon-button:hover .icon-button__icon {
  background-color: #fecc00;
  color: #4b4b4d;
}
.user-navigation .icon-button:hover .icon-button__icon svg {
  fill: #4b4b4d;
}
.user-navigation .icon-button:hover .icon-button__icon--bg-hover-color-alt {
  background-color: #4b4b4d;
  color: #fff;
}
.user-navigation .icon-button:hover .icon-button__icon--bg-hover-color-alt svg {
  fill: #fff;
}
.user-navigation__text {
  display: none;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
@media only screen and (min-width: 550px) {
  .user-navigation__text {
    display: inline;
    white-space: normal;
  }
}
.user-navigation__arrow {
  margin: 1rem 0 0 0.3333333333rem;
  width: 0.4666666667rem;
  height: 0.2666666667rem;
}
.user-navigation__sub-nav-user.user-navigation__sub-nav--pull-left::before {
  left: 0;
}
.user-navigation__sub-nav-user.user-navigation__sub-nav::before {
  right: 0;
  top: -0.5333333333rem;
  position: relative;
  margin: 0 auto;
}
.user-navigation__sub-nav-user.user-navigation__sub-nav-user-logged-in {
  min-width: 14rem;
}
.user-navigation__sub-nav-user.user-navigation__sub-nav-user-not-logged-in {
  min-width: 19rem;
}
.user-navigation__actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -ms-flex-negative: 0;
      flex-shrink: 0;
}
@media only screen and (min-width: 768px) {
  .user-navigation__actions {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -ms-flex-wrap: wrap;
        flex-wrap: wrap;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
    -ms-flex-wrap: nowrap;
        flex-wrap: nowrap;
    justify-content: space-between;
    background-color: #ececec;
    color: #4b4b4d;
    padding: 1rem 0.75rem 0.75rem;
    position: relative;
    width: 100%;
    bottom: 0;
  }
  .user-navigation__actions svg {
    fill: #4b4b4d;
  }
}
.user-navigation .user-navigation__show-all {
  margin-bottom: 1rem;
}
.user-navigation .user-navigation__show-all .button {
  background-color: #fff;
  color: #4b4b4d;
}
.user-navigation .user-navigation__show-all .button svg {
  fill: #4b4b4d;
}
.user-navigation .user-navigation__show-all .button:hover {
  background-color: #fecc00;
  color: #4b4b4d;
}
.user-navigation .user-navigation__show-all .button:hover svg {
  fill: #4b4b4d;
}
@media only screen and (min-width: 550px) {
  .user-navigation .user-navigation__show-all {
    margin-bottom: 0;
    margin-right: 2rem;
  }
}
.user-navigation .user-navigation__show-carts {
  margin-bottom: 1rem;
}
.user-navigation .user-navigation__show-carts .button {
  background-color: #fff;
  color: #4b4b4d;
}
.user-navigation .user-navigation__show-carts .button svg {
  fill: #4b4b4d;
}
.user-navigation .user-navigation__show-carts .button:hover {
  background-color: #fecc00;
  color: #4b4b4d;
}
.user-navigation .user-navigation__show-carts .button:hover svg {
  fill: #4b4b4d;
}
@media only screen and (min-width: 550px) {
  .user-navigation .user-navigation__show-carts {
    margin-bottom: 0;
    margin-right: 2rem;
  }
}
@media only screen and (max-width: 550px) {
  .user-navigation .user-navigation__actions {
    background-color: #ececec;
    color: #4b4b4d;
    width: 100%;
    bottom: 0;
    padding: 1rem 2rem;
  }
  .user-navigation .user-navigation__actions svg {
    fill: #4b4b4d;
  }
}
@media only screen and (max-width: 768px), only screen and (max-height: 500px) {
  .user-navigation .user-navigation__user-icon {
    font-size: 2rem;
  }
  .user-navigation .user-navigation__close-container {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    height: 3rem;
    padding: 1rem;
  }
  .user-navigation .user-navigation__close-container .icon-button__icon {
    font-size: 1.3333333333rem;
  }
  .user-navigation__sub-nav.user-navigation__sub-nav-user {
    overflow: scroll;
    left: 1.5rem;
    width: calc(100% - 1.5rem);
    padding: 0;
    height: auto;
  }
}
@media only screen and (max-width: 768px) and (min-height: 501px), only screen and (max-height: 500px) and (min-height: 501px) {
  .user-navigation__sub-nav.user-navigation__sub-nav-user {
    top: 2.6666666667rem;
    bottom: 2.6666666667rem;
  }
}
@media only screen and (max-width: 768px), only screen and (max-height: 500px) {
  .user-navigation__sub-nav.user-navigation__sub-nav-user .user-navigation__close-container {
    background-color: #ececec;
  }
  .user-navigation .user-navigation__close-container-cart,
  .user-navigation .user-navigation__close-container-list {
    background: none;
  }
  .user-navigation .user-navigation__sub-nav-inner {
    padding: 1rem;
    overflow-x: hidden;
    overflow-y: scroll;
    height: 100%;
  }
  .user-navigation .user-navigation__sub-nav-inner--logged-in {
    height: calc(100% - 5rem);
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
  }
  .user-navigation .user-navigation__sub-nav-inner--logged-in .navigation-sidebar {
    -webkit-box-flex: 1;
        -ms-flex: 1;
            flex: 1;
  }
}
@media only screen and (min-width: 768px) and (max-height: 500px) {
  .user-navigation__sub-nav {
    width: 30% !important;
    left: unset !important;
    right: 0;
    overflow: scroll !important;
    bottom: 0;
  }
}
@media only screen and (min-width: 550px) and (max-width: 768px) {
  .user-navigation__sub-nav.user-navigation__sub-nav-user {
    left: unset;
    right: 0;
    width: 50%;
  }
}
@media only screen and (min-width: 550px) and (max-width: 768px) and (min-height: 501px) {
  .user-navigation__sub-nav.user-navigation__sub-nav-user {
    top: 2.6666666667rem;
  }
}
@media only screen and (min-width: 550px) and (max-width: 768px) {
  .user-navigation__actions {
    background-color: #ececec;
    color: #4b4b4d;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    -webkit-box-pack: end;
        -ms-flex-pack: end;
            justify-content: flex-end;
    position: absolute;
    width: 100%;
    bottom: 0;
    padding: 1.5rem 1rem;
  }
  .user-navigation__actions svg {
    fill: #4b4b4d;
  }
}
@media only screen and (orientation: landscape) and (min-width: 0) and (max-width: 767px) {
  .user-navigation__sub-nav.user-navigation__sub-nav-user {
    width: 100%;
    height: 100%;
    padding: 0;
    top: 0;
    left: 0;
  }
  .user-navigation__sub-nav.user-navigation__sub-nav-user .user-navigation__sub-nav-inner {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    -ms-flex-wrap: wrap;
        flex-wrap: wrap;
    padding: 1rem;
  }
  .user-navigation__sub-nav.user-navigation__sub-nav-user .user-navigation__sub-nav-inner--logged-in {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
        -ms-flex-direction: column;
            flex-direction: column;
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
    -webkit-box-align: start;
        -ms-flex-align: start;
            align-items: flex-start;
    height: calc(100% - 45px);
  }
  .user-navigation__sub-nav.user-navigation__sub-nav-user .user-navigation__sub-nav-inner--logged-in .user-navigation__logout {
    -ms-flex-item-align: end;
        align-self: flex-end;
  }
}
.user-navigation__logout-container {
  background-color: #ececec;
  color: #4b4b4d;
  width: 100%;
  padding: 1rem;
}
.user-navigation__logout-container svg {
  fill: #4b4b4d;
}
.user-navigation__sub-nav-mobile-backdrop {
  background: rgba(111, 111, 111, 0.7);
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 400;
  opacity: 0;
  -webkit-transform: scale(0);
          transform: scale(0);
}
@media only screen and (min-width: 769px) and (min-height: 501px) {
  .user-navigation__sub-nav-mobile-backdrop {
    display: none !important;
  }
}
.user-navigation__sub-nav {
  border-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  -webkit-transition: opacity 250ms ease-in-out;
  transition: opacity 250ms ease-in-out;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  position: fixed;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
  background: #fff;
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.93;
  letter-spacing: 0.0133333333rem;
  opacity: 0;
  -webkit-transform: scale(0);
          transform: scale(0);
  z-index: 403;
  max-height: 100%;
  overflow: inherit;
}
.user-navigation__sub-nav--touch-active {
  opacity: 1;
  -webkit-transform: scale(1);
          transform: scale(1);
  pointer-events: all;
}
@media only screen and (max-width: 1023px) {
  .user-navigation__sub-nav:not(.user-navigation__sub-nav--touch-active) {
    opacity: 0;
  }
}
@media only screen and (min-width: 769px) and (min-height: 501px) {
  .user-navigation__sub-nav {
    -webkit-transition: opacity 250ms ease-in-out, -webkit-transform 250ms ease-in-out;
    transition: opacity 250ms ease-in-out, -webkit-transform 250ms ease-in-out;
    transition: transform 250ms ease-in-out, opacity 250ms ease-in-out;
    transition: transform 250ms ease-in-out, opacity 250ms ease-in-out, -webkit-transform 250ms ease-in-out;
    position: absolute;
    top: 100%;
    left: 50%;
    height: auto;
    width: auto;
    min-width: 28.6666666667rem;
    -webkit-transform: translateX(-50%) scale(0);
            transform: translateX(-50%) scale(0);
    -webkit-transform-origin: top center;
            transform-origin: top center;
    -webkit-box-shadow: 0 0.0666666667rem 0.1333333333rem 0 rgba(75, 75, 77, 0.2);
            box-shadow: 0 0.0666666667rem 0.1333333333rem 0 rgba(75, 75, 77, 0.2);
    margin-top: 1.5rem;
    max-height: 31rem;
  }
  .user-navigation__sub-nav--pull-left::before {
    left: 95%;
  }
}
@media only screen and (min-width: 769px) and (min-height: 501px) and (min-width: 1400px) {
  .user-navigation__sub-nav--pull-left::before {
    left: 90%;
  }
}
@media only screen and (min-width: 769px) and (min-height: 501px) {
  .user-navigation__sub-nav::before {
    border-width: 1px;
    border-style: solid;
    border-color: #d0d0d0 transparent transparent #d0d0d0;
    background-color: #fff;
    color: #4b4b4d;
    content: "";
    position: absolute;
    top: -0.5rem;
    right: 2.4rem;
    left: unset;
    width: 1rem;
    height: 1rem;
    -webkit-transform: rotate(45deg);
            transform: rotate(45deg);
  }
  .user-navigation__sub-nav::before svg {
    fill: #4b4b4d;
  }
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) and (min-width: 768px) {
  .user-navigation .user-navigation__sub-nav-shopping-list,
  .user-navigation .user-navigation__sub-nav-cart {
    height: 30rem;
  }
  .user-navigation .user-navigation__actions-ie {
    position: absolute;
  }
}
.user-navigation__sub-nav-inner {
  background-color: #fff;
  color: #4b4b4d;
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  overflow: hidden;
  overflow-y: auto;
  padding: 1rem;
}
.user-navigation__sub-nav-inner svg {
  fill: #4b4b4d;
}
.user-navigation__sub-nav-inner.user-navigation__sub-nav-inner--logged-in {
  padding: 0;
}
.user-navigation__sub-nav-inner--bg-grey {
  background-color: #ececec;
  color: #4b4b4d;
}
.user-navigation__sub-nav-inner--bg-grey svg {
  fill: #4b4b4d;
}
.user-navigation__sub-nav-inner--border-top {
  border-top-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  margin-top: 1rem;
  padding-top: 1rem;
}
.user-navigation__sub-nav-inner .link {
  color: #4b4b4d;
}
.user-navigation__sub-nav-inner .link:hover {
  text-decoration: none;
}
.user-navigation__sub-nav-inner .navigation-sidebar {
  width: 100%;
}
.user-navigation__sub-nav-inner .loading-spinner {
  display: none;
  position: absolute;
  width: 100%;
  height: 100%;
  left: 0;
  top: 0;
}
.user-navigation__sub-nav-inner.loading {
  cursor: wait;
  position: relative;
  overflow: hidden;
}
.user-navigation__sub-nav-inner.loading .loading-spinner {
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  background-color: rgba(255, 255, 255, 0.9);
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  padding: 0 0.5rem 0 1rem;
}
.user-navigation__sub-nav-inner.loading .loading-spinner__dot {
  top: -0.3rem;
}
@media only screen and (min-width: 550px) {
  .user-navigation__sub-nav-inner {
    -webkit-box-flex: 0;
        -ms-flex-positive: 0;
            flex-grow: 0;
  }
  .user-navigation__sub-nav-inner .navigation-sidebar {
    margin-bottom: 1rem;
    margin-right: 0;
  }
  .user-navigation__sub-nav-inner .navigation-sidebar-item {
    border: 0;
  }
  .user-navigation__sub-nav-inner .navigation-sidebar-item:first-child .navigation-sidebar-item__link {
    padding-top: 0;
  }
}
.user-navigation__close-container {
  width: 100%;
  height: 3rem;
  position: relative;
}
@media only screen and (min-width: 769px) and (min-height: 501px) {
  .user-navigation__close-container {
    display: none;
  }
}
.user-navigation__close-container .icon-button {
  width: auto;
  height: auto;
  top: 0;
  right: 0;
}
.user-navigation__close-container-cart {
  background-color: #fff;
}
.user-navigation__close-container-list {
  background: none;
}
.user-navigation__sub-nav-close {
  position: absolute;
  top: 1rem;
  right: 1rem;
  margin-right: 0;
}
.user-navigation__sub-nav-close svg {
  width: 2rem;
  height: 2rem;
}
@media only screen and (min-width: 1024px) and (min-height: 501px) {
  .user-navigation__sub-nav-close {
    display: none;
  }
}
.user-navigation__sub-nav-title {
  padding: 0.8rem 4rem 0.9333333333rem;
  line-height: 1.67;
  text-align: center;
}
@media only screen and (min-width: 768px) {
  .user-navigation__sub-nav-title {
    display: none;
  }
}
.user-navigation__sub-nav-actions {
  padding: 1.4rem 1.0666666667rem 2rem;
}
@media only screen and (min-width: 768px) {
  .user-navigation__sub-nav-actions {
    padding: 1.0666666667rem 1.6rem 0.0666666667rem;
  }
}
.user-navigation__sub-nav-link {
  color: #b2b2b2;
  -webkit-transition: color 250ms ease-in-out;
  transition: color 250ms ease-in-out;
}
.user-navigation__sub-nav-link:hover {
  color: #929292;
}
.user-navigation__benefit-item {
  list-style-type: initial;
  list-style-position: inside;
}
.user-navigation .button {
  white-space: nowrap;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.accordion-element-row.container {
  max-width: unset;
  margin: 0;
  padding: 0 1.3333333333rem;
}
.accordion-element-row__headline-wrapper {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  padding: 1.6666666667rem 0;
}
.accordion-element-row__headline-wrapper:hover {
  cursor: pointer;
}
.accordion-element-row__headline-wrapper .accordion-element-row__headline {
  margin: 0;
}
.accordion-element-row__headline-wrapper .accordion-element-row__headline-icon {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  height: 2rem;
  font-size: 3rem;
  -webkit-transform: rotate(0deg);
          transform: rotate(0deg);
  -webkit-transition: -webkit-transform 0.5s ease;
  transition: -webkit-transform 0.5s ease;
  transition: transform 0.5s ease;
  transition: transform 0.5s ease, -webkit-transform 0.5s ease;
}
.accordion-element-row__headline-wrapper.active .accordion-element-row__headline {
  /* stylelint-disable-next-line max-nesting-depth */
}
.accordion-element-row__headline-wrapper.active .accordion-element-row__headline-icon {
  -webkit-transform: rotate(-180deg);
          transform: rotate(-180deg);
}
.accordion-element-row__content {
  display: none;
}
.accordion-element-row__content .container {
  max-width: unset;
  margin: 0;
  padding: 0;
}
.accordion-element-row__content.active {
  display: block;
  padding-bottom: 1.3333333333rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.bite-karriere {
  margin: 2rem auto;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.catalog-box {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  position: relative;
  margin-top: 2rem;
}
@media only screen and (min-width: 1024px) {
  .catalog-box {
    width: 25%;
    padding: 0 0.5rem;
  }
}
.catalog-box__actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  padding-top: 1rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
/**
 * We need the !important in this styles because the keen slider adds inline styles to the slides for min-width,
 * max-width and transform
 */
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
/**
 * We need the !important in this styles because the keen slider adds inline styles to the slides for min-width,
 * max-width and transform
 */
@media only screen and (min-width: 1024px) {
  .content-slider-slide-image--is-hero {
    padding-right: 8.3333333333%;
  }
  .content-slider-slide-image--is-hero.content-slider-slide-image--no-image {
    margin: auto 0;
  }
  .content-slider-slide-image--is-hero.keen-slider__slide {
    /* stylelint-disable declaration-no-important */
    min-width: calc(50% - 21px) !important;
    max-width: calc(50% - 21px) !important;
    /* stylelint-enable declaration-no-important */
    -webkit-box-flex: 2;
        -ms-flex-positive: 2;
            flex-grow: 2;
  }
}
.content-slider-slide-image--placeholder.keen-slider__slide {
  /* stylelint-disable declaration-no-important */
  min-width: 0 !important;
  max-width: 0 !important;
  width: 0 !important;
  -webkit-transform: none !important;
          transform: none !important;
  display: none;
  /* stylelint-enable declaration-no-important */
}
.content-slider-slide-image__text {
  font-size: 0.9333333333rem;
  line-height: 1.6rem;
  font-weight: 400;
}
.content-slider-slide-image__button {
  font-size: 1.0666666667rem;
  line-height: 1.4666666667rem;
  font-weight: 400;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
/**
 * We need the !important in this styles because the keen slider adds inline styles to the slides for min-width,
 * max-width and transform
 */
@media only screen and (min-width: 1024px) {
  .content-slider-slide-image-text--is-hero {
    padding-right: 8.3333333333%;
  }
  .content-slider-slide-image-text--is-hero.content-slider-slide-image-text--no-image {
    margin: auto 0;
  }
  .content-slider-slide-image-text--is-hero.keen-slider__slide {
    /* stylelint-disable declaration-no-important */
    min-width: calc(50% - 21px) !important;
    max-width: calc(50% - 21px) !important;
    /* stylelint-enable declaration-no-important */
    -webkit-box-flex: 2;
        -ms-flex-positive: 2;
            flex-grow: 2;
  }
}
.content-slider-slide-image-text--placeholder.keen-slider__slide {
  /* stylelint-disable declaration-no-important */
  min-width: 0 !important;
  max-width: 0 !important;
  width: 0 !important;
  -webkit-transform: none !important;
          transform: none !important;
  display: none;
  /* stylelint-enable declaration-no-important */
}
.content-slider-slide-image-text__text {
  font-size: 0.9333333333rem;
  line-height: 1.6rem;
  font-weight: 400;
}
.content-slider-slide-image-text__button {
  font-size: 1.0666666667rem;
  line-height: 1.4666666667rem;
  font-weight: 400;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
/**
 * We need the !important in this styles because the keen slider adds inline styles to the slides for min-width,
 * max-width and transform
 */
@media only screen and (min-width: 1024px) {
  .content-slider-slide-image-text-full--is-hero {
    padding-right: 8.3333333333%;
  }
  .content-slider-slide-image-text-full--is-hero.content-slider-slide-image-text-full--no-image {
    margin: auto 0;
  }
  .content-slider-slide-image-text-full--is-hero.keen-slider__slide {
    /* stylelint-disable declaration-no-important */
    min-width: calc(50% - 21px) !important;
    max-width: calc(50% - 21px) !important;
    /* stylelint-enable declaration-no-important */
    -webkit-box-flex: 2;
        -ms-flex-positive: 2;
            flex-grow: 2;
  }
}
.content-slider-slide-image-text-full--placeholder.keen-slider__slide {
  /* stylelint-disable declaration-no-important */
  min-width: 0 !important;
  max-width: 0 !important;
  width: 0 !important;
  -webkit-transform: none !important;
          transform: none !important;
  display: none;
  /* stylelint-enable declaration-no-important */
}
.content-slider-slide-image-text-full__text {
  font-size: 0.9333333333rem;
  line-height: 1.6rem;
  font-weight: 400;
}
.content-slider-slide-image-text-full__button {
  font-size: 1.0666666667rem;
  line-height: 1.4666666667rem;
  font-weight: 400;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.cta-button {
  font-size: 1.0666666667rem;
  margin-bottom: 0;
}
.cta-button .button {
  display: inline-block;
}
.cta-button .button--slvtec {
  background-color: #01a3ec;
  color: #fff;
  border-color: #01a3ec;
}
.cta-button .button--slvtec .button__icon-right--slvtec > svg {
  fill: #fff;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.cta-button-numinos__link {
  display: inline-block;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.headline-group {
  margin-top: 0.5rem;
}
.headline-group .headline {
  color: #4b4b4d;
  width: 100%;
  display: block;
}
.headline-group .headline--preline {
  font-size: 1.2rem;
  line-height: 1.4666666667rem;
  font-weight: 400;
}
.headline-group .headline--headline {
  font-size: 1.6rem;
  line-height: 2rem;
  font-weight: 700;
}
.headline-group .headline--subline {
  font-size: 1.2rem;
  line-height: 1.7333333333rem;
  font-weight: 400;
}
.headline-group--icon-box .headline--preline, .headline-group--sidebar .headline--preline {
  font-size: 1.0666666667rem;
  line-height: 1.3333333333rem;
  font-weight: 400;
}
.headline-group--icon-box .headline--headline, .headline-group--sidebar .headline--headline {
  font-size: 1.2rem;
  line-height: 1.7333333333rem;
  text-transform: inherit;
}
.headline-group--icon-box .headline--subline, .headline-group--sidebar .headline--subline {
  font-size: 1.0666666667rem;
  line-height: 1.6rem;
  font-weight: 400;
}
.headline-group--sidebar .headline--headline, .headline-group--sidebar .headline--subline {
  margin: 0;
}
.headline-group--sidebar .headline--subline {
  font-size: 0.8rem;
  line-height: 1.3333333333rem;
  font-weight: 700;
}
.headline-group--box-headline .headline {
  margin-bottom: 1rem;
}
.headline-group--box-headline .headline--headline {
  font-size: 2.5333333333rem;
  line-height: 2.9333333333rem;
  font-weight: 300;
}
.headline-group--break-word {
  word-break: break-word;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.icon-box {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  position: relative;
  padding: 0 0.5rem;
}
.icon-box__icon {
  -ms-flex-item-align: center;
      align-self: center;
}
.icon-box__icon svg {
  width: 6.2857142857rem;
  height: 6.2857142857rem;
}
.icon-box__text-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
.icon-box__text {
  font-size: 0.9333333333rem;
  margin: 0 0 1rem 0;
}
.icon-box__text p {
  margin: 0;
}
.icon-box .cta-button .button::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.iframe-element {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
.iframe-element__iframe {
  width: 100%;
  margin: 0;
}
.iframe-element__iframe--full {
  height: 100vh;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.image {
  display: block;
  width: 100%;
}
.image__image {
  width: 100%;
}
.image--zoom {
  cursor: pointer;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.image-element {
  line-height: 0;
}
.image-element__link {
  cursor: pointer;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.image-map-area {
  z-index: 700;
}
.image-map-area--circle-fill {
  pointer-events: none;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.image-map-area-tooltip {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  background-color: #fff;
  color: #4b4b4d;
  border-width: 1px;
  border-style: solid;
  border-color: #ececec;
  position: absolute;
  max-width: 13.3333333333rem;
  min-height: 10rem;
  margin-top: 1rem;
  padding: 0.5rem;
  z-index: 10;
}
.image-map-area-tooltip svg {
  fill: #4b4b4d;
}
.image-map-area-tooltip__close-button .icon-button__icon svg {
  width: 1.4666666667rem;
  height: 1.4666666667rem;
}
.image-map-area-tooltip.has-right-pointer {
  border-right-color: #fecc00;
  border-right-width: 2px;
}
.image-map-area-tooltip.has-right-pointer::before {
  right: -0.1333333333rem;
}
.image-map-area-tooltip.has-right-pointer::after {
  right: -0.5333333333rem;
}
.image-map-area-tooltip.has-left-pointer {
  border-left-color: #fecc00;
  border-left-width: 2px;
}
.image-map-area-tooltip.has-left-pointer::before {
  left: -0.1333333333rem;
}
.image-map-area-tooltip.has-left-pointer::after {
  left: -0.4666666667rem;
}
.image-map-area-tooltip::before {
  background-color: #fecc00;
  color: #4b4b4d;
  content: "";
  position: absolute;
  height: 120%;
  width: 0.1333333333rem;
  top: 0;
}
.image-map-area-tooltip::before svg {
  fill: #4b4b4d;
}
.image-map-area-tooltip::after {
  border-radius: 10px;
  background-color: #fecc00;
  color: #4b4b4d;
  content: "";
  position: absolute;
  height: 0.8rem;
  width: 0.8rem;
}
.image-map-area-tooltip::after svg {
  fill: #4b4b4d;
}
.image-map-area-tooltip--slvtec::before {
  background-color: #01a3ec;
}
.image-map-area-tooltip--slvtec::after {
  background-color: #01a3ec;
}
.image-map-area-tooltip .headline {
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  padding-bottom: 0.5rem;
  margin-bottom: 0.5rem;
  font-size: 0.9333333333rem;
}
.image-map-area-tooltip .markdown {
  font-size: 0.9333333333rem;
}
.image-map-area-tooltip .markdown p {
  margin: 0.25rem 0 0;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.image-map-area-tooltip-content {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  max-width: 22rem;
  padding: 0.5rem 0 2rem;
}
.image-map-area-tooltip-content.has-right-pointer {
  border-bottom-left-radius: 35px;
}
.image-map-area-tooltip-content.has-right-pointer::before {
  right: -0.1666666667rem;
}
.image-map-area-tooltip-content.has-left-pointer {
  border-bottom-right-radius: 35px;
}
.image-map-area-tooltip-content.has-down-pointer::after {
  -webkit-transform: translateY(var(--down-pointer-translate-y));
          transform: translateY(var(--down-pointer-translate-y));
  top: 0;
}
.image-map-area-tooltip-content.has-down-pointer::before {
  height: 100%;
  margin-top: var(--down-pointer-margin);
}
.image-map-area-tooltip-content.has-up-pointer::after {
  -webkit-transform: translateY(var(--up-pointer-translate-y));
          transform: translateY(var(--up-pointer-translate-y));
  bottom: 0;
}
.image-map-area-tooltip-content.has-up-pointer::before {
  height: 100%;
  margin-top: var(--up-pointer-margin);
}
.image-map-area-tooltip-content .teaser-box {
  padding: 0.5rem;
}
.image-map-area-tooltip-content .teaser-box__button {
  margin-top: 0.5rem;
}
.image-map-area-tooltip-content .headline {
  border: none;
  padding-bottom: 0;
  margin-bottom: 0;
}
.image-map-area-tooltip-content .icon-button {
  width: 2rem;
  height: 2rem;
}
.image-map-area-tooltip-content .icon-button__icon, .image-map-area-tooltip-content .icon-button__icon-container {
  width: 2rem;
  height: 2rem;
}
.image-map-area-tooltip-content .icon-button__icon svg {
  width: 1.4666666667rem;
  height: 1.4666666667rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.image-map-area-tooltip-numinos .headline {
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
  padding-bottom: 0.5rem;
  margin-bottom: 0.5rem;
  font-size: 0.9333333333rem;
}
.image-map-area-tooltip-numinos .markdown {
  font-size: 0.9333333333rem;
}
.image-map-area-tooltip-numinos .markdown p {
  margin: 0.25rem 0 0;
}
.image-map-area-tooltip-numinos::before {
  top: -3.0666666667rem;
}
.image-map-area-tooltip-numinos::after {
  top: -3.0666666667rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.image-map-area-tooltip-product {
  max-width: 22rem;
  padding: 0.5rem 1.5rem 2rem;
}
.image-map-area-tooltip-product.has-right-pointer {
  border-bottom-left-radius: 35px;
}
.image-map-area-tooltip-product.has-right-pointer::before {
  right: -0.1666666667rem;
}
.image-map-area-tooltip-product.has-right-pointer::after {
  -webkit-transform: translate(-0.3333333333rem, -4rem);
          transform: translate(-0.3333333333rem, -4rem);
}
.image-map-area-tooltip-product.has-left-pointer {
  border-bottom-right-radius: 35px;
}
.image-map-area-tooltip-product.has-left-pointer::after {
  -webkit-transform: translate(0.3333333333rem, -4rem);
          transform: translate(0.3333333333rem, -4rem);
}
.image-map-area-tooltip-product::before {
  height: 100%;
  margin-top: calc((50% - 7.5rem) * -1);
}
.image-map-area-tooltip-product__close-button {
  position: absolute;
  right: 0;
  top: 0;
  z-index: 700;
}
.image-map-area-tooltip-product .icon-button {
  width: 2rem;
  height: 2rem;
}
.image-map-area-tooltip-product .icon-button__icon, .image-map-area-tooltip-product .icon-button__icon-container {
  width: 2rem;
  height: 2rem;
}
.image-map-area-tooltip-product .icon-button__icon svg {
  width: 1.4666666667rem;
  height: 1.4666666667rem;
}
.image-map-area-tooltip-product .thumbnail {
  text-align: center;
}
.image-map-area-tooltip-product .availability {
  font-size: 0.8rem;
}
.image-map-area-tooltip-product .availability__label {
  margin-left: 0.5rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.image-map-product-box {
  font-size: 0.9333333333rem;
}
.image-map-product-box .headline {
  border: none;
}
.image-map-product-box__actions {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.image-map-slider__target-image {
  width: calc(100% + 2rem);
  height: 70vh;
  margin-left: -1rem;
  overflow: hidden;
  position: relative;
  z-index: -1;
}
.image-map-slider__target-image-container {
  position: absolute;
  left: 0;
  top: 0;
  width: 80rem;
  height: 40.5333333333rem;
  -webkit-transition: all 1s ease-in-out;
  transition: all 1s ease-in-out;
}
.image-map-slider__target-image-container .pointer {
  width: 0.8rem;
  height: 0.8rem;
  border-radius: 100%;
  position: absolute;
  left: 0;
  top: 0;
  background-color: #fecc00;
}
.image-map-slider__target-image-container .pointer::before {
  content: "";
  position: absolute;
  width: 0.1333333333rem;
  height: 40rem;
  top: 0;
  left: 0.3333333333rem;
  background-color: #fecc00;
}
.image-map-slider__container {
  background-color: #fff;
  color: #4b4b4d;
  border-top: 0.2rem solid #fecc00;
  max-width: 26.6666666667rem;
  margin: -12rem auto 0;
  overflow: hidden;
  position: relative;
}
.image-map-slider__container svg {
  fill: #4b4b4d;
}
.image-map-slider__slides .slick-dots {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  margin: 1rem auto 0;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
}
.image-map-slider__slides .slick-dots li {
  display: block;
  width: 0.6666666667rem;
  height: 0.6666666667rem;
  margin: 0.4rem;
  border-radius: 100%;
  background: #929292;
  /* stylelint-disable-next-line max-nesting-depth */
}
.image-map-slider__slides .slick-dots li.slick-active {
  background-color: #fecc00;
  color: #4b4b4d;
  width: 1.3333333333rem;
  height: 1.3333333333rem;
  margin: 0.0666666667rem;
}
.image-map-slider__slides .slick-dots li.slick-active svg {
  fill: #4b4b4d;
}
.image-map-slider__slides .slick-dots button {
  display: none;
}
.image-map-slider__slides .slick-slide img {
  margin: 0 auto;
}
.image-map-slider__slide {
  border-bottom-right-radius: 35px;
  padding: 2rem;
  border: 0.0666666667rem solid #ececec;
}
.image-map-slider__slide .headline {
  border-bottom: 0.0666666667rem solid #1a171b;
  height: 2.5rem;
  margin-bottom: 1rem;
}
.image-map-slider .teaser-box,
.image-map-slider .image-map-product-box {
  position: relative;
}
.image-map-slider .teaser-box .headline,
.image-map-slider .image-map-product-box .headline {
  border: none;
  padding-bottom: 0;
  margin-bottom: 0;
  height: auto;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.image-teaser-full-size {
  display: block;
  position: relative;
}
@media only screen and (min-width: 768px) {
  .image-teaser-full-size {
    max-height: 53vh;
  }
}
.image-teaser-full-size .image {
  width: 100%;
}
.image-teaser-full-size .image__image {
  display: block;
  width: auto;
}
@media only screen and (min-width: 768px) {
  .image-teaser-full-size .image__image {
    max-height: 53vh;
    margin: 0 auto;
    -o-object-fit: cover;
       object-fit: cover;
    width: 100%;
  }
}
.image-teaser-full-size__content-container {
  position: relative;
  height: 100%;
}
.image-teaser-full-size__content-container .container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  padding: 0;
  height: 100%;
}
@media only screen and (min-width: 768px) {
  .image-teaser-full-size__content-container {
    position: absolute;
    width: 100%;
    top: 0;
  }
}
.image-teaser-full-size__text-box {
  background-color: #ececec;
  color: #4b4b4d;
  padding: 1.5rem;
  margin-top: auto;
}
.image-teaser-full-size__text-box svg {
  fill: #4b4b4d;
}
@media only screen and (min-width: 768px) {
  .image-teaser-full-size__text-box {
    background-color: rgba(236, 236, 236, 0.85);
    color: #4b4b4d;
    max-width: 22rem;
    position: absolute;
    bottom: 1rem;
  }
  .image-teaser-full-size__text-box svg {
    fill: #4b4b4d;
  }
}
@media only screen and (min-width: 768px) and (max-width: 1200px) {
  .image-teaser-full-size__text-box {
    left: 1rem;
  }
}
.image-teaser-full-size__text-box--left {
  border-bottom-right-radius: 35px;
}
.image-teaser-full-size__text-box--right {
  border-bottom-left-radius: 35px;
  margin-left: auto;
  -ms-flex-item-align: end;
      align-self: flex-end;
}
.image-teaser-full-size__text-box--none {
  display: none;
}
.image-teaser-full-size__headline {
  font-size: 2.2666666667rem;
  line-height: 2.6666666667rem;
  font-weight: 300;
}
.image-teaser-full-size__text {
  font-size: 0.9333333333rem;
  line-height: 1.6rem;
  font-weight: 400;
}
.image-teaser-full-size__button {
  font-size: 1.0666666667rem;
  line-height: 1.4666666667rem;
  font-weight: 400;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.image-text-teaser {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  position: relative;
}
.image-text-teaser--is-transparent::after, .image-text-teaser--is-gray::after, .image-text-teaser--is-white::after {
  content: "";
  position: absolute;
  width: 150vw;
  height: 100%;
  z-index: -1;
  left: -50vw;
}
.image-text-teaser--is-transparent::after {
  background-color: rgba(255, 255, 255, 0);
}
.image-text-teaser--is-gray::after {
  background-color: #ececec;
}
.image-text-teaser--is-white::after {
  background-color: #fff;
}
.image-text-teaser__image {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser__image {
    width: 50%;
  }
}
.image-text-teaser__image .image__image {
  -o-object-fit: cover;
     object-fit: cover;
}
.image-text-teaser__text-wrapper {
  padding: 0 0 1.0666666667rem 0;
}
@media only screen and (min-width: 768px) {
  .image-text-teaser__text-wrapper {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser__text-wrapper {
    margin: 0;
    width: 50%;
    padding: 0 0 0.5rem 0;
  }
}
.image-text-teaser__text-container {
  padding: 0 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser__text-container {
    width: 38rem;
    padding: 0;
  }
}
.image-text-teaser__text ul {
  margin: 1rem 0;
}
.image-text-teaser--textbox-position-left {
  -webkit-box-orient: vertical;
  -webkit-box-direction: reverse;
      -ms-flex-direction: column-reverse;
          flex-direction: column-reverse;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-left {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: reverse;
        -ms-flex-direction: row-reverse;
            flex-direction: row-reverse;
  }
}
.image-text-teaser--textbox-position-left .image-text-teaser__image {
  padding-bottom: 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-left .image-text-teaser__image {
    padding-bottom: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-left .image-text-teaser__text-wrapper {
    padding-right: 5.3333333333rem;
    padding-left: 1rem;
  }
}
.image-text-teaser--textbox-position-right {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-right {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
  }
}
.image-text-teaser--textbox-position-right .image-text-teaser__image {
  padding-top: 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-right .image-text-teaser__image {
    padding-top: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-right .image-text-teaser__text-wrapper {
    padding-left: 5.3333333333rem;
    padding-right: 1rem;
  }
}
.image-text-teaser--youtube-container {
  height: 100%;
  width: 50%;
}
.image-text-teaser--youtube-container video-player {
  padding-bottom: calc(50% + 2.5rem);
  padding-top: 0.5rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.image-text-teaser {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  position: relative;
}
.image-text-teaser--is-transparent::after, .image-text-teaser--is-gray::after, .image-text-teaser--is-white::after {
  content: "";
  position: absolute;
  width: 150vw;
  height: 100%;
  z-index: -1;
  left: -50vw;
}
.image-text-teaser--is-transparent::after {
  background-color: rgba(255, 255, 255, 0);
}
.image-text-teaser--is-gray::after {
  background-color: #ececec;
}
.image-text-teaser--is-white::after {
  background-color: #fff;
}
.image-text-teaser__image {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser__image {
    width: 50%;
  }
}
.image-text-teaser__image .image__image {
  -o-object-fit: cover;
     object-fit: cover;
}
.image-text-teaser__text-wrapper {
  padding: 0 0 1.0666666667rem 0;
}
@media only screen and (min-width: 768px) {
  .image-text-teaser__text-wrapper {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser__text-wrapper {
    margin: 0;
    width: 50%;
    padding: 0 0 0.5rem 0;
  }
}
.image-text-teaser__text-container {
  padding: 0 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser__text-container {
    width: 38rem;
    padding: 0;
  }
}
.image-text-teaser__text ul {
  margin: 1rem 0;
}
.image-text-teaser--textbox-position-left {
  -webkit-box-orient: vertical;
  -webkit-box-direction: reverse;
      -ms-flex-direction: column-reverse;
          flex-direction: column-reverse;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-left {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: reverse;
        -ms-flex-direction: row-reverse;
            flex-direction: row-reverse;
  }
}
.image-text-teaser--textbox-position-left .image-text-teaser__image {
  padding-bottom: 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-left .image-text-teaser__image {
    padding-bottom: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-left .image-text-teaser__text-wrapper {
    padding-right: 5.3333333333rem;
    padding-left: 1rem;
  }
}
.image-text-teaser--textbox-position-right {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-right {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
  }
}
.image-text-teaser--textbox-position-right .image-text-teaser__image {
  padding-top: 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-right .image-text-teaser__image {
    padding-top: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-right .image-text-teaser__text-wrapper {
    padding-left: 5.3333333333rem;
    padding-right: 1rem;
  }
}
.image-text-teaser--youtube-container {
  height: 100%;
  width: 50%;
}
.image-text-teaser--youtube-container video-player {
  padding-bottom: calc(50% + 2.5rem);
  padding-top: 0.5rem;
}

.image-text-teaser-25-75 {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  position: relative;
}
.image-text-teaser-25-75--is-transparent::after, .image-text-teaser-25-75--is-gray::after, .image-text-teaser-25-75--is-white::after {
  content: "";
  position: absolute;
  width: 150vw;
  height: 100%;
  z-index: -1;
  left: -50vw;
}
.image-text-teaser-25-75--is-transparent::after {
  background-color: rgba(255, 255, 255, 0);
}
.image-text-teaser-25-75--is-gray::after {
  background-color: #ececec;
}
.image-text-teaser-25-75--is-white::after {
  background-color: #fff;
}
.image-text-teaser-25-75__image {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-25-75__image {
    width: 50%;
  }
}
.image-text-teaser-25-75__image .image__image {
  -o-object-fit: cover;
     object-fit: cover;
}
.image-text-teaser-25-75__text-wrapper {
  padding: 0 0 1.0666666667rem 0;
}
@media only screen and (min-width: 768px) {
  .image-text-teaser-25-75__text-wrapper {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-25-75__text-wrapper {
    margin: 0;
    width: 50%;
    padding: 0 0 0.5rem 0;
  }
}
.image-text-teaser-25-75__text-container {
  padding: 0 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-25-75__text-container {
    width: 38rem;
    padding: 0;
  }
}
.image-text-teaser-25-75__text ul {
  margin: 1rem 0;
}
.image-text-teaser-25-75--textbox-position-left {
  -webkit-box-orient: vertical;
  -webkit-box-direction: reverse;
      -ms-flex-direction: column-reverse;
          flex-direction: column-reverse;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-25-75--textbox-position-left {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: reverse;
        -ms-flex-direction: row-reverse;
            flex-direction: row-reverse;
  }
}
.image-text-teaser-25-75--textbox-position-left .image-text-teaser-25-75__image {
  padding-bottom: 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-25-75--textbox-position-left .image-text-teaser-25-75__image {
    padding-bottom: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-25-75--textbox-position-left .image-text-teaser-25-75__text-wrapper {
    padding-right: 5.3333333333rem;
    padding-left: 1rem;
  }
}
.image-text-teaser-25-75--textbox-position-right {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-25-75--textbox-position-right {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
  }
}
.image-text-teaser-25-75--textbox-position-right .image-text-teaser-25-75__image {
  padding-top: 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-25-75--textbox-position-right .image-text-teaser-25-75__image {
    padding-top: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-25-75--textbox-position-right .image-text-teaser-25-75__text-wrapper {
    padding-left: 5.3333333333rem;
    padding-right: 1rem;
  }
}
.image-text-teaser-25-75--youtube-container {
  height: 100%;
  width: 50%;
}
.image-text-teaser-25-75--youtube-container video-player {
  padding-bottom: calc(50% + 2.5rem);
  padding-top: 0.5rem;
}

.image-text-teaser-25-75 {
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-25-75__image {
    width: 27%;
  }
}
@media only screen and (min-width: 768px) {
  .image-text-teaser-25-75__text-wrapper {
    -webkit-box-align: baseline;
        -ms-flex-align: baseline;
            align-items: baseline;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-25-75__text-wrapper {
    width: 73%;
  }
}
.image-text-teaser-25-75__text-container {
  padding: 0;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-25-75__text-container {
    width: auto;
  }
}
.image-text-teaser-25-75__text ul {
  margin: 1rem 0;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-25-75--textbox-position-left .image-text-teaser-25-75__text-wrapper {
    padding-left: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-25-75--textbox-position-right .image-text-teaser-25-75__text-wrapper {
    padding-right: 0;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.image-text-teaser {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  position: relative;
}
.image-text-teaser--is-transparent::after, .image-text-teaser--is-gray::after, .image-text-teaser--is-white::after {
  content: "";
  position: absolute;
  width: 150vw;
  height: 100%;
  z-index: -1;
  left: -50vw;
}
.image-text-teaser--is-transparent::after {
  background-color: rgba(255, 255, 255, 0);
}
.image-text-teaser--is-gray::after {
  background-color: #ececec;
}
.image-text-teaser--is-white::after {
  background-color: #fff;
}
.image-text-teaser__image {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser__image {
    width: 50%;
  }
}
.image-text-teaser__image .image__image {
  -o-object-fit: cover;
     object-fit: cover;
}
.image-text-teaser__text-wrapper {
  padding: 0 0 1.0666666667rem 0;
}
@media only screen and (min-width: 768px) {
  .image-text-teaser__text-wrapper {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser__text-wrapper {
    margin: 0;
    width: 50%;
    padding: 0 0 0.5rem 0;
  }
}
.image-text-teaser__text-container {
  padding: 0 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser__text-container {
    width: 38rem;
    padding: 0;
  }
}
.image-text-teaser__text ul {
  margin: 1rem 0;
}
.image-text-teaser--textbox-position-left {
  -webkit-box-orient: vertical;
  -webkit-box-direction: reverse;
      -ms-flex-direction: column-reverse;
          flex-direction: column-reverse;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-left {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: reverse;
        -ms-flex-direction: row-reverse;
            flex-direction: row-reverse;
  }
}
.image-text-teaser--textbox-position-left .image-text-teaser__image {
  padding-bottom: 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-left .image-text-teaser__image {
    padding-bottom: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-left .image-text-teaser__text-wrapper {
    padding-right: 5.3333333333rem;
    padding-left: 1rem;
  }
}
.image-text-teaser--textbox-position-right {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-right {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
  }
}
.image-text-teaser--textbox-position-right .image-text-teaser__image {
  padding-top: 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-right .image-text-teaser__image {
    padding-top: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-right .image-text-teaser__text-wrapper {
    padding-left: 5.3333333333rem;
    padding-right: 1rem;
  }
}
.image-text-teaser--youtube-container {
  height: 100%;
  width: 50%;
}
.image-text-teaser--youtube-container video-player {
  padding-bottom: calc(50% + 2.5rem);
  padding-top: 0.5rem;
}

.image-text-teaser-50-50 {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  position: relative;
}
.image-text-teaser-50-50--is-transparent::after, .image-text-teaser-50-50--is-gray::after, .image-text-teaser-50-50--is-white::after {
  content: "";
  position: absolute;
  width: 150vw;
  height: 100%;
  z-index: -1;
  left: -50vw;
}
.image-text-teaser-50-50--is-transparent::after {
  background-color: rgba(255, 255, 255, 0);
}
.image-text-teaser-50-50--is-gray::after {
  background-color: #ececec;
}
.image-text-teaser-50-50--is-white::after {
  background-color: #fff;
}
.image-text-teaser-50-50__image {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50__image {
    width: 50%;
  }
}
.image-text-teaser-50-50__image .image__image {
  -o-object-fit: cover;
     object-fit: cover;
}
.image-text-teaser-50-50__text-wrapper {
  padding: 0 0 1.0666666667rem 0;
}
@media only screen and (min-width: 768px) {
  .image-text-teaser-50-50__text-wrapper {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50__text-wrapper {
    margin: 0;
    width: 50%;
    padding: 0 0 0.5rem 0;
  }
}
.image-text-teaser-50-50__text-container {
  padding: 0 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50__text-container {
    width: 38rem;
    padding: 0;
  }
}
.image-text-teaser-50-50__text ul {
  margin: 1rem 0;
}
.image-text-teaser-50-50--textbox-position-left {
  -webkit-box-orient: vertical;
  -webkit-box-direction: reverse;
      -ms-flex-direction: column-reverse;
          flex-direction: column-reverse;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50--textbox-position-left {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: reverse;
        -ms-flex-direction: row-reverse;
            flex-direction: row-reverse;
  }
}
.image-text-teaser-50-50--textbox-position-left .image-text-teaser-50-50__image {
  padding-bottom: 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50--textbox-position-left .image-text-teaser-50-50__image {
    padding-bottom: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50--textbox-position-left .image-text-teaser-50-50__text-wrapper {
    padding-right: 5.3333333333rem;
    padding-left: 1rem;
  }
}
.image-text-teaser-50-50--textbox-position-right {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50--textbox-position-right {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
  }
}
.image-text-teaser-50-50--textbox-position-right .image-text-teaser-50-50__image {
  padding-top: 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50--textbox-position-right .image-text-teaser-50-50__image {
    padding-top: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50--textbox-position-right .image-text-teaser-50-50__text-wrapper {
    padding-left: 5.3333333333rem;
    padding-right: 1rem;
  }
}
.image-text-teaser-50-50--youtube-container {
  height: 100%;
  width: 50%;
}
.image-text-teaser-50-50--youtube-container video-player {
  padding-bottom: calc(50% + 2.5rem);
  padding-top: 0.5rem;
}

@media only screen and (min-width: 768px) {
  .image-text-teaser-50-50__text-wrapper {
    -webkit-box-pack: end;
        -ms-flex-pack: end;
            justify-content: flex-end;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50__text-wrapper {
    width: 50%;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50--textbox-position-left .image-text-teaser-50-50__text-wrapper {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: reverse;
        -ms-flex-direction: row-reverse;
            flex-direction: row-reverse;
    padding-left: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50--textbox-position-right .image-text-teaser-50-50__text-wrapper {
    padding-right: 0;
  }
}
.image-text-teaser-50-50__text-container {
  padding: 0;
}
.image-text-teaser-50-50__text ul {
  margin: 1rem 0;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.image-text-teaser {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  position: relative;
}
.image-text-teaser--is-transparent::after, .image-text-teaser--is-gray::after, .image-text-teaser--is-white::after {
  content: "";
  position: absolute;
  width: 150vw;
  height: 100%;
  z-index: -1;
  left: -50vw;
}
.image-text-teaser--is-transparent::after {
  background-color: rgba(255, 255, 255, 0);
}
.image-text-teaser--is-gray::after {
  background-color: #ececec;
}
.image-text-teaser--is-white::after {
  background-color: #fff;
}
.image-text-teaser__image {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser__image {
    width: 50%;
  }
}
.image-text-teaser__image .image__image {
  -o-object-fit: cover;
     object-fit: cover;
}
.image-text-teaser__text-wrapper {
  padding: 0 0 1.0666666667rem 0;
}
@media only screen and (min-width: 768px) {
  .image-text-teaser__text-wrapper {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser__text-wrapper {
    margin: 0;
    width: 50%;
    padding: 0 0 0.5rem 0;
  }
}
.image-text-teaser__text-container {
  padding: 0 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser__text-container {
    width: 38rem;
    padding: 0;
  }
}
.image-text-teaser__text ul {
  margin: 1rem 0;
}
.image-text-teaser--textbox-position-left {
  -webkit-box-orient: vertical;
  -webkit-box-direction: reverse;
      -ms-flex-direction: column-reverse;
          flex-direction: column-reverse;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-left {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: reverse;
        -ms-flex-direction: row-reverse;
            flex-direction: row-reverse;
  }
}
.image-text-teaser--textbox-position-left .image-text-teaser__image {
  padding-bottom: 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-left .image-text-teaser__image {
    padding-bottom: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-left .image-text-teaser__text-wrapper {
    padding-right: 5.3333333333rem;
    padding-left: 1rem;
  }
}
.image-text-teaser--textbox-position-right {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-right {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
  }
}
.image-text-teaser--textbox-position-right .image-text-teaser__image {
  padding-top: 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-right .image-text-teaser__image {
    padding-top: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser--textbox-position-right .image-text-teaser__text-wrapper {
    padding-left: 5.3333333333rem;
    padding-right: 1rem;
  }
}
.image-text-teaser--youtube-container {
  height: 100%;
  width: 50%;
}
.image-text-teaser--youtube-container video-player {
  padding-bottom: calc(50% + 2.5rem);
  padding-top: 0.5rem;
}

.image-text-teaser-50-50 {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  position: relative;
}
.image-text-teaser-50-50--is-transparent::after, .image-text-teaser-50-50--is-gray::after, .image-text-teaser-50-50--is-white::after {
  content: "";
  position: absolute;
  width: 150vw;
  height: 100%;
  z-index: -1;
  left: -50vw;
}
.image-text-teaser-50-50--is-transparent::after {
  background-color: rgba(255, 255, 255, 0);
}
.image-text-teaser-50-50--is-gray::after {
  background-color: #ececec;
}
.image-text-teaser-50-50--is-white::after {
  background-color: #fff;
}
.image-text-teaser-50-50__image {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50__image {
    width: 50%;
  }
}
.image-text-teaser-50-50__image .image__image {
  -o-object-fit: cover;
     object-fit: cover;
}
.image-text-teaser-50-50__text-wrapper {
  padding: 0 0 1.0666666667rem 0;
}
@media only screen and (min-width: 768px) {
  .image-text-teaser-50-50__text-wrapper {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50__text-wrapper {
    margin: 0;
    width: 50%;
    padding: 0 0 0.5rem 0;
  }
}
.image-text-teaser-50-50__text-container {
  padding: 0 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50__text-container {
    width: 38rem;
    padding: 0;
  }
}
.image-text-teaser-50-50__text ul {
  margin: 1rem 0;
}
.image-text-teaser-50-50--textbox-position-left {
  -webkit-box-orient: vertical;
  -webkit-box-direction: reverse;
      -ms-flex-direction: column-reverse;
          flex-direction: column-reverse;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50--textbox-position-left {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: reverse;
        -ms-flex-direction: row-reverse;
            flex-direction: row-reverse;
  }
}
.image-text-teaser-50-50--textbox-position-left .image-text-teaser-50-50__image {
  padding-bottom: 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50--textbox-position-left .image-text-teaser-50-50__image {
    padding-bottom: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50--textbox-position-left .image-text-teaser-50-50__text-wrapper {
    padding-right: 5.3333333333rem;
    padding-left: 1rem;
  }
}
.image-text-teaser-50-50--textbox-position-right {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50--textbox-position-right {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
  }
}
.image-text-teaser-50-50--textbox-position-right .image-text-teaser-50-50__image {
  padding-top: 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50--textbox-position-right .image-text-teaser-50-50__image {
    padding-top: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50--textbox-position-right .image-text-teaser-50-50__text-wrapper {
    padding-left: 5.3333333333rem;
    padding-right: 1rem;
  }
}
.image-text-teaser-50-50--youtube-container {
  height: 100%;
  width: 50%;
}
.image-text-teaser-50-50--youtube-container video-player {
  padding-bottom: calc(50% + 2.5rem);
  padding-top: 0.5rem;
}

@media only screen and (min-width: 768px) {
  .image-text-teaser-50-50__text-wrapper {
    -webkit-box-pack: end;
        -ms-flex-pack: end;
            justify-content: flex-end;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50__text-wrapper {
    width: 50%;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50--textbox-position-left .image-text-teaser-50-50__text-wrapper {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: reverse;
        -ms-flex-direction: row-reverse;
            flex-direction: row-reverse;
    padding-left: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50--textbox-position-right .image-text-teaser-50-50__text-wrapper {
    padding-right: 0;
  }
}
.image-text-teaser-50-50__text-container {
  padding: 0;
}
.image-text-teaser-50-50__text ul {
  margin: 1rem 0;
}

.image-text-teaser-50-50-small {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  position: relative;
}
.image-text-teaser-50-50-small--is-transparent::after, .image-text-teaser-50-50-small--is-gray::after, .image-text-teaser-50-50-small--is-white::after {
  content: "";
  position: absolute;
  width: 150vw;
  height: 100%;
  z-index: -1;
  left: -50vw;
}
.image-text-teaser-50-50-small--is-transparent::after {
  background-color: rgba(255, 255, 255, 0);
}
.image-text-teaser-50-50-small--is-gray::after {
  background-color: #ececec;
}
.image-text-teaser-50-50-small--is-white::after {
  background-color: #fff;
}
.image-text-teaser-50-50-small__image {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50-small__image {
    width: 50%;
  }
}
.image-text-teaser-50-50-small__image .image__image {
  -o-object-fit: cover;
     object-fit: cover;
}
.image-text-teaser-50-50-small__text-wrapper {
  padding: 0 0 1.0666666667rem 0;
}
@media only screen and (min-width: 768px) {
  .image-text-teaser-50-50-small__text-wrapper {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50-small__text-wrapper {
    margin: 0;
    width: 50%;
    padding: 0 0 0.5rem 0;
  }
}
.image-text-teaser-50-50-small__text-container {
  padding: 0 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50-small__text-container {
    width: 38rem;
    padding: 0;
  }
}
.image-text-teaser-50-50-small__text ul {
  margin: 1rem 0;
}
.image-text-teaser-50-50-small--textbox-position-left {
  -webkit-box-orient: vertical;
  -webkit-box-direction: reverse;
      -ms-flex-direction: column-reverse;
          flex-direction: column-reverse;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50-small--textbox-position-left {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: reverse;
        -ms-flex-direction: row-reverse;
            flex-direction: row-reverse;
  }
}
.image-text-teaser-50-50-small--textbox-position-left .image-text-teaser-50-50-small__image {
  padding-bottom: 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50-small--textbox-position-left .image-text-teaser-50-50-small__image {
    padding-bottom: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50-small--textbox-position-left .image-text-teaser-50-50-small__text-wrapper {
    padding-right: 5.3333333333rem;
    padding-left: 1rem;
  }
}
.image-text-teaser-50-50-small--textbox-position-right {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50-small--textbox-position-right {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
  }
}
.image-text-teaser-50-50-small--textbox-position-right .image-text-teaser-50-50-small__image {
  padding-top: 1rem;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50-small--textbox-position-right .image-text-teaser-50-50-small__image {
    padding-top: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50-small--textbox-position-right .image-text-teaser-50-50-small__text-wrapper {
    padding-left: 5.3333333333rem;
    padding-right: 1rem;
  }
}
.image-text-teaser-50-50-small--youtube-container {
  height: 100%;
  width: 50%;
}
.image-text-teaser-50-50-small--youtube-container video-player {
  padding-bottom: calc(50% + 2.5rem);
  padding-top: 0.5rem;
}

@media only screen and (min-width: 768px) {
  .image-text-teaser-50-50-small__text-wrapper {
    -webkit-box-pack: end;
        -ms-flex-pack: end;
            justify-content: flex-end;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50-small__text-wrapper {
    width: 50%;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50-small--textbox-position-left .image-text-teaser-50-50-small__text-wrapper {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: reverse;
        -ms-flex-direction: row-reverse;
            flex-direction: row-reverse;
    padding-left: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50-small--textbox-position-right .image-text-teaser-50-50-small__text-wrapper {
    padding-right: 0;
  }
}
.image-text-teaser-50-50-small__text-container {
  padding: 0;
}
.image-text-teaser-50-50-small__text ul {
  margin: 1rem 0;
}

.image-text-teaser-50-50-small {
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
@media only screen and (min-width: 1024px) {
  .image-text-teaser-50-50-small__image {
    width: 50%;
    height: 19.1333333333rem;
  }
}
.image-text-teaser-50-50-small__text ul {
  margin: 1rem 0;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.modal-window {
  z-index: 2000;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  position: fixed;
  opacity: 0;
  visibility: hidden;
  -webkit-transform: scale(1.1);
          transform: scale(1.1);
  -webkit-transition: visibility 0s linear 0.25s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s, -webkit-transform 0.25s;
  pointer-events: none;
}
.modal-window__overlay {
  z-index: 1000;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  position: fixed;
  opacity: 0;
  background-color: rgba(0, 0, 0, 0.5);
  visibility: hidden;
  -webkit-transform: scale(1.1);
          transform: scale(1.1);
  -webkit-transition: visibility 0s linear 0.25s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s, -webkit-transform 0.25s;
}
.modal-window__overlay_blur {
  -webkit-backdrop-filter: blur(5px);
          backdrop-filter: blur(5px);
}
.modal-window__container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  pointer-events: all;
  background-color: #fff;
  position: absolute;
  top: 50%;
  left: 50%;
  height: 100%;
  width: 100%;
  -webkit-transform: translate(-50%, -50%);
          transform: translate(-50%, -50%);
}
@media only screen and (min-width: 768px) {
  .modal-window__container {
    height: 90%;
    width: 90%;
  }
}
.modal-window__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  padding: 0.75rem 1.5rem;
  position: relative;
}
.modal-window__header .headline {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  word-break: break-all;
  width: calc(100% - 2.4rem);
  font-size: 1.4666666667rem;
  margin-bottom: 0;
}
@media only screen and (min-width: 768px) {
  .modal-window__header .headline {
    width: 100%;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    font-size: 2.4rem;
  }
}
.modal-window__close-button-container {
  position: absolute;
  right: 0;
  top: 0;
}
.modal-window__close-button-container .icon-button {
  width: 1.6666666667rem;
  height: 1.6666666667rem;
  margin: 0.5rem;
}
.modal-window__close-button-container .icon-button__icon-container {
  width: 1.6666666667rem;
  height: 1.6666666667rem;
}
.modal-window__close-button-container .icon-button .icon--close {
  width: 1.6666666667rem;
  height: 1.6666666667rem;
}
.modal-window__close-button-container .icon-button .icon--close svg {
  width: 1.6666666667rem;
  height: 1.6666666667rem;
}
@media only screen and (min-width: 768px) {
  .modal-window__close-button-container .icon-button {
    width: 1rem;
    height: 1rem;
    cursor: pointer;
    margin: 0.75rem;
    /* stylelint-disable-next-line max-nesting-depth */
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .modal-window__close-button-container .icon-button__icon-container {
    width: 1rem;
    height: 1rem;
  }
  .modal-window__close-button-container .icon-button .icon--close {
    width: 1rem;
    height: 1rem;
  }
  .modal-window__close-button-container .icon-button .icon--close svg {
    width: 1rem;
    height: 1rem;
  }
}
.modal-window__content {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  height: 100%;
  overflow: auto;
  padding: 2.5rem 1.5rem 1.5rem;
}
.modal-window__content::after {
  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0)), color-stop(90%, rgb(255, 255, 255)));
  background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgb(255, 255, 255) 90%);
}
.modal-window__active {
  opacity: 1;
  visibility: visible;
  -webkit-transform: scale(1);
          transform: scale(1);
  -webkit-transition: visibility 0s linear 0s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0s, opacity 0.25s 0s, transform 0.25s;
  transition: visibility 0s linear 0s, opacity 0.25s 0s, transform 0.25s, -webkit-transform 0.25s;
}
.modal-window--medium .modal-window__container {
  max-width: 65.3333333333rem;
}
.modal-window .modal-window__close-window .button {
  border-radius: unset;
}
.modal-window--product-configurator .modal-window__container {
  height: 100%;
}
@media only screen and (min-width: 768px) {
  .modal-window--product-configurator .modal-window__container {
    max-width: 75%;
    left: 50%;
    height: 50%;
  }
}
@media only screen and (min-width: 1024px) {
  .modal-window--product-configurator .modal-window__container {
    max-width: 600px;
    left: 50%;
    height: 50%;
  }
}
.modal-window--product-configurator .modal-window__container .modal-window__close-window {
  display: none;
}
.modal-window--product-configurator .modal-window__content {
  padding: 1.5rem 1.5rem 1.5rem;
}
.modal-window--product-configurator .modal-window__header .headline {
  width: 100%;
  font-size: 2rem;
  font-weight: 400;
  word-break: break-word;
  margin-top: 1rem;
}
.modal-window--product-configurator-small .modal-window__container {
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 768px) {
  .modal-window--product-configurator-small .modal-window__container {
    width: 50%;
    max-width: 1200px;
    min-width: calc(1200px / 2);
    height: 30%;
    min-height: 16.6666666667rem;
  }
}
.modal-window--product-configurator-small .modal-window__header {
  background-color: #ececec;
}
.modal-window--product-configurator-small .modal-window__content {
  padding: 1.5rem 4rem 1.5rem;
}
.modal-window--product-configurator-no-driver .modal-window__container {
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 768px) {
  .modal-window--product-configurator-no-driver .modal-window__container {
    height: auto;
    min-height: unset;
  }
}
.modal-window--product-configurator-no-driver .modal-window__container .modal-window__close-window {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 768px) {
  .modal-window--product-configurator-no-driver .modal-window__container .modal-window__close-window {
    -webkit-box-pack: end;
        -ms-flex-pack: end;
            justify-content: flex-end;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
  }
}
.modal-window--product-configurator-no-driver .modal-window__container .modal-window__close-window .button {
  border-radius: 0.6666666667rem;
}
.modal-window--product-configurator-no-driver .modal-window__modal-actions {
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.modal-window--product-configurator-no-driver .modal-window__modal-actions .move-forward {
  margin-top: 0.5rem;
}
@media only screen and (min-width: 768px) {
  .modal-window--product-configurator-no-driver .modal-window__modal-actions .move-forward {
    margin-top: 0;
    margin-left: 0.5rem;
  }
}
.modal-window--product-configurator-no-driver .modal-window__content {
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
@media only screen and (min-width: 1024px) {
  .modal-window--track-configurator .modal-window__container {
    max-width: 66.6666666667rem;
  }
}
.modal-window__room-view-image-container {
  margin: 0 auto;
}
.modal-window__room-view-image {
  width: -moz-fit-content;
  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
  width: -webkit-fit-content;
  width: fit-content;
}
.modal-window--rimless .modal-window__content {
  padding: 2.5rem 0 1.5rem;
}
.modal-window--sb-image .modal-window__image {
  min-width: 100%;
}
.modal-window .service-sidebar-content {
  display: block;
}
.modal-window--dynamic-content .modal-window__container {
  border-width: 3px;
  border-style: solid;
  border-color: #fecc00;
  max-width: 51.2rem;
  max-height: 90%;
  height: auto;
}
.modal-window--dynamic-content .modal-window__content > .container {
  margin: 0;
}
.modal-window--dynamic-content .newsletter-element {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
.modal-window--dynamic-content .newsletter-element__image-container {
  -ms-flex-preferred-size: unset;
      flex-basis: unset;
}

.marketing-modal-window {
  z-index: 2000;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  position: fixed;
  opacity: 0;
  visibility: hidden;
  -webkit-transform: scale(1.1);
          transform: scale(1.1);
  -webkit-transition: visibility 0s linear 0.25s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s, -webkit-transform 0.25s;
  pointer-events: none;
}
.marketing-modal-window__overlay {
  z-index: 1000;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  position: fixed;
  opacity: 0;
  background-color: rgba(0, 0, 0, 0.5);
  visibility: hidden;
  -webkit-transform: scale(1.1);
          transform: scale(1.1);
  -webkit-transition: visibility 0s linear 0.25s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s, -webkit-transform 0.25s;
}
.marketing-modal-window__overlay_blur {
  -webkit-backdrop-filter: blur(5px);
          backdrop-filter: blur(5px);
}
.marketing-modal-window__container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  pointer-events: all;
  background-color: #fff;
  position: absolute;
  top: 50%;
  left: 50%;
  height: 100%;
  width: 100%;
  -webkit-transform: translate(-50%, -50%);
          transform: translate(-50%, -50%);
}
@media only screen and (min-width: 768px) {
  .marketing-modal-window__container {
    height: 90%;
    width: 90%;
  }
}
.marketing-modal-window__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  padding: 0.75rem 1.5rem;
  position: relative;
}
.marketing-modal-window__header .headline {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  word-break: break-all;
  width: calc(100% - 2.4rem);
  font-size: 1.4666666667rem;
  margin-bottom: 0;
}
@media only screen and (min-width: 768px) {
  .marketing-modal-window__header .headline {
    width: 100%;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    font-size: 2.4rem;
  }
}
.marketing-modal-window__close-button-container {
  position: absolute;
  right: 0;
  top: 0;
}
.marketing-modal-window__close-button-container .icon-button {
  width: 1.6666666667rem;
  height: 1.6666666667rem;
  margin: 0.5rem;
}
.marketing-modal-window__close-button-container .icon-button__icon-container {
  width: 1.6666666667rem;
  height: 1.6666666667rem;
}
.marketing-modal-window__close-button-container .icon-button .icon--close {
  width: 1.6666666667rem;
  height: 1.6666666667rem;
}
.marketing-modal-window__close-button-container .icon-button .icon--close svg {
  width: 1.6666666667rem;
  height: 1.6666666667rem;
}
@media only screen and (min-width: 768px) {
  .marketing-modal-window__close-button-container .icon-button {
    width: 1rem;
    height: 1rem;
    cursor: pointer;
    margin: 0.75rem;
    /* stylelint-disable-next-line max-nesting-depth */
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .marketing-modal-window__close-button-container .icon-button__icon-container {
    width: 1rem;
    height: 1rem;
  }
  .marketing-modal-window__close-button-container .icon-button .icon--close {
    width: 1rem;
    height: 1rem;
  }
  .marketing-modal-window__close-button-container .icon-button .icon--close svg {
    width: 1rem;
    height: 1rem;
  }
}
.marketing-modal-window__content {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  height: 100%;
  overflow: auto;
  padding: 2.5rem 1.5rem 1.5rem;
}
.marketing-modal-window__content::after {
  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0)), color-stop(90%, rgb(255, 255, 255)));
  background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgb(255, 255, 255) 90%);
}
.marketing-modal-window__active {
  opacity: 1;
  visibility: visible;
  -webkit-transform: scale(1);
          transform: scale(1);
  -webkit-transition: visibility 0s linear 0s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0s, opacity 0.25s 0s, transform 0.25s;
  transition: visibility 0s linear 0s, opacity 0.25s 0s, transform 0.25s, -webkit-transform 0.25s;
}
.marketing-modal-window--medium .marketing-modal-window__container {
  max-width: 65.3333333333rem;
}
.marketing-modal-window .marketing-modal-window__close-window .button {
  border-radius: unset;
}
.marketing-modal-window--product-configurator .marketing-modal-window__container {
  height: 100%;
}
@media only screen and (min-width: 768px) {
  .marketing-modal-window--product-configurator .marketing-modal-window__container {
    max-width: 75%;
    left: 50%;
    height: 50%;
  }
}
@media only screen and (min-width: 1024px) {
  .marketing-modal-window--product-configurator .marketing-modal-window__container {
    max-width: 600px;
    left: 50%;
    height: 50%;
  }
}
.marketing-modal-window--product-configurator .marketing-modal-window__container .marketing-modal-window__close-window {
  display: none;
}
.marketing-modal-window--product-configurator .marketing-modal-window__content {
  padding: 1.5rem 1.5rem 1.5rem;
}
.marketing-modal-window--product-configurator .marketing-modal-window__header .headline {
  width: 100%;
  font-size: 2rem;
  font-weight: 400;
  word-break: break-word;
  margin-top: 1rem;
}
.marketing-modal-window--product-configurator-small .marketing-modal-window__container {
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 768px) {
  .marketing-modal-window--product-configurator-small .marketing-modal-window__container {
    width: 50%;
    max-width: 1200px;
    min-width: calc(1200px / 2);
    height: 30%;
    min-height: 16.6666666667rem;
  }
}
.marketing-modal-window--product-configurator-small .marketing-modal-window__header {
  background-color: #ececec;
}
.marketing-modal-window--product-configurator-small .marketing-modal-window__content {
  padding: 1.5rem 4rem 1.5rem;
}
.marketing-modal-window--product-configurator-no-driver .marketing-modal-window__container {
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 768px) {
  .marketing-modal-window--product-configurator-no-driver .marketing-modal-window__container {
    height: auto;
    min-height: unset;
  }
}
.marketing-modal-window--product-configurator-no-driver .marketing-modal-window__container .marketing-modal-window__close-window {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 768px) {
  .marketing-modal-window--product-configurator-no-driver .marketing-modal-window__container .marketing-modal-window__close-window {
    -webkit-box-pack: end;
        -ms-flex-pack: end;
            justify-content: flex-end;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
  }
}
.marketing-modal-window--product-configurator-no-driver .marketing-modal-window__container .marketing-modal-window__close-window .button {
  border-radius: 0.6666666667rem;
}
.marketing-modal-window--product-configurator-no-driver .marketing-modal-window__modal-actions {
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.marketing-modal-window--product-configurator-no-driver .marketing-modal-window__modal-actions .move-forward {
  margin-top: 0.5rem;
}
@media only screen and (min-width: 768px) {
  .marketing-modal-window--product-configurator-no-driver .marketing-modal-window__modal-actions .move-forward {
    margin-top: 0;
    margin-left: 0.5rem;
  }
}
.marketing-modal-window--product-configurator-no-driver .marketing-modal-window__content {
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
@media only screen and (min-width: 1024px) {
  .marketing-modal-window--track-configurator .marketing-modal-window__container {
    max-width: 66.6666666667rem;
  }
}
.marketing-modal-window__room-view-image-container {
  margin: 0 auto;
}
.marketing-modal-window__room-view-image {
  width: -moz-fit-content;
  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
  width: -webkit-fit-content;
  width: fit-content;
}
.marketing-modal-window--rimless .marketing-modal-window__content {
  padding: 2.5rem 0 1.5rem;
}
.marketing-modal-window--sb-image .marketing-modal-window__image {
  min-width: 100%;
}
.marketing-modal-window .service-sidebar-content {
  display: block;
}
.marketing-modal-window--dynamic-content .marketing-modal-window__container {
  border-width: 3px;
  border-style: solid;
  border-color: #fecc00;
  max-width: 51.2rem;
  max-height: 90%;
  height: auto;
}
.marketing-modal-window--dynamic-content .marketing-modal-window__content > .container {
  margin: 0;
}
.marketing-modal-window--dynamic-content .newsletter-element {
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
.marketing-modal-window--dynamic-content .newsletter-element__image-container {
  -ms-flex-preferred-size: unset;
      flex-basis: unset;
}

.marketing-modal-window__content-container--has-error {
  text-align: center;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
@media only screen and (min-width: 768px) {
  .newsletter-element {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: reverse;
        -ms-flex-direction: row-reverse;
            flex-direction: row-reverse;
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
  }
}
.newsletter-element__headlines {
  margin-top: 1rem;
}
.newsletter-element__top-form-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  width: 100%;
}
.newsletter-element__top-form-container .text-field__label {
  color: #4b4b4d;
}
.newsletter-element__name-fields {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  margin-top: 1rem;
}
.newsletter-element__name-fields .text-field {
  width: 50%;
}
.newsletter-element__name-fields .text-field:first-child {
  margin-right: 0.5rem;
}
.newsletter-element .button {
  padding: 0 0.75rem;
}
.newsletter-element .button__label {
  display: block;
  color: #000;
  margin-right: 0.5rem;
}
.newsletter-element .button__label-container .icon {
  margin: 0;
}
.newsletter-element .button__label-container svg {
  width: 1.3333333333rem;
  height: 1.3333333333rem;
}
@media only screen and (min-width: 768px) {
  .newsletter-element__container {
    -ms-flex-preferred-size: calc(100% - 21rem);
        flex-basis: calc(100% - 21rem);
    max-width: 50%;
    padding-right: 0.25rem;
  }
}
@media only screen and (min-width: 1024px) {
  .newsletter-element__container {
    max-width: 38%;
  }
}
.newsletter-element__image-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -ms-flex-preferred-size: 18rem;
      flex-basis: 18rem;
}
@media only screen and (min-width: 768px) {
  .newsletter-element__image-container {
    -webkit-box-flex: 0;
        -ms-flex-positive: 0;
            flex-grow: 0;
    -webkit-box-pack: start;
        -ms-flex-pack: start;
            justify-content: flex-start;
    -ms-flex-preferred-size: 28rem;
        flex-basis: 28rem;
    padding-left: 0.25rem;
  }
}
@media only screen and (min-width: 1024px) {
  .newsletter-element__image-container {
    -webkit-box-orient: vertical;
    -webkit-box-direction: reverse;
        -ms-flex-direction: column-reverse;
            flex-direction: column-reverse;
    -ms-flex-preferred-size: 37.8666666667rem;
        flex-basis: 37.8666666667rem;
  }
}
.newsletter-element__image-container--center {
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
}
@media only screen and (min-width: 768px) {
  .newsletter-element__image-container .image {
    margin-bottom: 1.3333333333rem;
  }
}
@media only screen and (min-width: 1024px) {
  .newsletter-element__image-container .image {
    margin-bottom: 0;
  }
}
.newsletter-element__registration-form {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  line-height: initial;
}
.newsletter-element__registration-form .text-field__label {
  color: #4b4b4d;
}
.newsletter-element__registration-form .custom-select {
  /* stylelint-disable-next-line declaration-no-important */
  width: 100% !important;
  margin-top: 1rem;
}
.newsletter-element__registration-form .custom-select__select {
  width: 100%;
  color: #4b4b4d;
}
.newsletter-element__registration-form .select2-container {
  /* stylelint-disable-next-line declaration-no-important */
  width: 100% !important;
}
.newsletter-element__registration-form .select2-container .select2-selection {
  /* stylelint-disable-next-line max-nesting-depth */
}
.newsletter-element__registration-form .select2-container .select2-selection__rendered {
  color: #4b4b4d;
}
.newsletter-element__registration-form .checkbox {
  width: 100%;
}
.newsletter-element__registration-form .checkbox__check {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  width: 100%;
}
.newsletter-element__registration-form .checkbox__label {
  font-size: 0.7333333333rem;
  line-height: 1rem;
  padding-top: 0.3333333333rem;
}
.newsletter-element__registration-form .checkbox__box {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-item-align: baseline;
      align-self: baseline;
  border: 0.0666666667rem solid #4b4b4d;
  border-radius: 0;
  width: 1.6rem;
  height: 1.6rem;
}
.newsletter-element__registration-form .form__required-note {
  text-align: right;
}
.newsletter-element .input-button {
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
  width: 100%;
  margin-top: 2rem;
}
.newsletter-element .form-response__success, .newsletter-element .form-response__error {
  padding: 1rem;
  margin-top: 0.25rem;
  margin-bottom: 1.5rem;
}
.newsletter-element .form-response__success::before, .newsletter-element .form-response__error::before {
  left: 0;
  right: 0;
}
.newsletter-element .form-response__success .list__item, .newsletter-element .form-response__error .list__item {
  padding-left: 0;
}
.newsletter-element .form-response__success .icon, .newsletter-element .form-response__error .icon {
  font-size: 2rem;
  margin-top: 0;
}
.newsletter-element__check {
  width: 0 !important;
  height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
}
.newsletter-element__check * {
  width: 0 !important;
  height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  border: none;
}
.newsletter-element--modal .newsletter-element__container {
  max-width: unset;
  padding: 1.5rem;
}
.newsletter-element--modal .newsletter-element__registration-container {
  padding: 0 1.5rem;
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
.newsletter-element--modal .newsletter-element__registration-container .custom-select {
  margin-top: 0;
}
.newsletter-element--modal .newsletter-element__registration-container .text-field {
  margin-top: 1rem;
}
.newsletter-element--modal .newsletter-element__action-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  padding-top: 1rem;
}
.newsletter-element--modal .text-field {
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
  width: 100%;
  margin-top: 2rem;
}
.newsletter-element--modal .button {
  padding: 0.8rem 1.3333333333rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-category-teaser-box {
  text-align: center;
}
.product-category-teaser-box__image {
  width: 6.6666666667rem;
  height: 6.6666666667rem;
  margin: 0 auto;
}
.product-category-teaser-box__image .image__image {
  -o-object-fit: contain;
     object-fit: contain;
}
.product-category-teaser-box__link {
  display: block;
  font-size: 1.0666666667rem;
  color: #4b4b4d;
  text-decoration: none;
  text-align: center;
}
.product-category-teaser-box__link:hover {
  color: #4b4b4d;
  text-decoration: none;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-landing-page-hero-teaser__container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: reverse;
      -ms-flex-direction: column-reverse;
          flex-direction: column-reverse;
  position: relative;
  margin-bottom: 8rem;
}
@media only screen and (min-width: 768px) {
  .product-landing-page-hero-teaser__container {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -ms-flex-wrap: wrap;
        flex-wrap: wrap;
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
    -ms-flex-wrap: nowrap;
        flex-wrap: nowrap;
    justify-content: space-between;
    margin: 0;
  }
}
.product-landing-page-hero-teaser__container::before {
  content: "";
  width: 200vw;
  height: 120%;
  background-image: linear-gradient(150deg, #4b4b4d, #1a171b);
  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
  background-image: url("/assets/images/grain_pattern.png"), linear-gradient(150deg, #4b4b4d, #1a171b);
  position: absolute;
  z-index: -1;
  left: -50vw;
  top: -10%;
  -webkit-transform: rotate(5deg);
          transform: rotate(5deg);
}
@media only screen and (min-width: 768px) {
  .product-landing-page-hero-teaser__container::before {
    height: 100%;
    top: -15%;
  }
}
.product-landing-page-hero-teaser__image-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  width: 100%;
}
.product-landing-page-hero-teaser__image-container .image-element {
  -webkit-box-flex: 1;
      -ms-flex-positive: 1;
          flex-grow: 1;
  margin: 0;
  padding: 0;
  width: auto;
}
.product-landing-page-hero-teaser__image-container .image-element:last-child {
  margin-top: -20%;
  margin-right: -15%;
}
@media only screen and (min-width: 768px) {
  .product-landing-page-hero-teaser__image-container .image-element {
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .product-landing-page-hero-teaser__image-container .image-element:first-child {
    max-width: 60%;
  }
  .product-landing-page-hero-teaser__image-container .image-element:last-child {
    margin: 0;
    margin-left: -12rem;
  }
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .product-landing-page-hero-teaser__image-container .image-element:first-child {
    max-width: none;
  }
}
@media only screen and (min-width: 1024px) {
  .product-landing-page-hero-teaser__image-container .image-element {
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .product-landing-page-hero-teaser__image-container .image-element:last-child {
    margin-left: -15rem;
  }
}
.product-landing-page-hero-teaser__text-container {
  -ms-flex-item-align: start;
      align-self: flex-start;
  color: #fff;
}
@media only screen and (min-width: 768px) {
  .product-landing-page-hero-teaser__text-container {
    margin-top: 8rem;
    max-width: 40%;
  }
}
@media only screen and (min-width: 768px) and (max-width: 1023px) {
  .product-landing-page-hero-teaser__text-container {
    margin-top: 1rem;
  }
}
.product-landing-page-hero-teaser__text-container .headline {
  width: 100%;
  text-transform: uppercase;
  line-height: 1.1;
  color: #fff;
}
.product-landing-page-hero-teaser__text-container .headline--h1 {
  font-size: 3rem;
}
.product-landing-page-hero-teaser__text-container .headline--subheadline {
  display: inline-block;
}
.product-landing-page-hero-teaser__text {
  font-size: 0.9333333333rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-landing-page-info-box {
  border-width: 1px;
  border-style: solid;
  border-color: #fecc00;
  border-bottom-right-radius: 6.6666666667rem;
  padding: 1rem;
}
@media only screen and (min-width: 769px) {
  .product-landing-page-info-box {
    width: 50%;
    padding: 3rem;
    margin-left: auto;
  }
}
.product-landing-page-info-box .headline {
  text-transform: uppercase;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-landing-page-teaser__container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  position: relative;
  overflow: hidden;
}
@media only screen and (min-width: 768px) and (max-width: 1024px) {
  .product-landing-page-teaser__container.product-landing-page-teaser__overlap {
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .product-landing-page-teaser__container.product-landing-page-teaser__overlap-before {
    margin-top: -6rem;
  }
}
@media only screen and (min-width: 1025px) {
  .product-landing-page-teaser__container.product-landing-page-teaser__overlap {
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .product-landing-page-teaser__container.product-landing-page-teaser__overlap-before {
    margin-top: -7rem;
  }
  .product-landing-page-teaser__container.product-landing-page-teaser__overlap-after {
    margin-bottom: -12rem;
  }
}
@media only screen and (min-width: 1400px) {
  .product-landing-page-teaser__container.product-landing-page-teaser__overlap {
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .product-landing-page-teaser__container.product-landing-page-teaser__overlap-before {
    margin-top: -8rem;
  }
}
@media only screen and (min-width: 1920px) {
  .product-landing-page-teaser__container.product-landing-page-teaser__overlap {
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .product-landing-page-teaser__container.product-landing-page-teaser__overlap-before {
    margin-top: -9rem;
  }
}
.product-landing-page-teaser__container:not(.product-landing-page-teaser--with-image).product-landing-page-teaser__overlap {
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
@media only screen and (min-width: 768px) and (max-width: 1025px) {
  .product-landing-page-teaser__container:not(.product-landing-page-teaser--with-image).product-landing-page-teaser__overlap-before {
    margin-top: 0;
  }
}
.product-landing-page-teaser__orientation--left {
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.product-landing-page-teaser__orientation--right {
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
}
.product-landing-page-teaser__content-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  width: 100%;
  height: 100%;
  padding: 3rem 0;
}
@media only screen and (min-width: 550px) {
  .product-landing-page-teaser__content-container {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
  }
}
@media only screen and (min-width: 1025px) {
  .product-landing-page-teaser__content-container--with-connection {
    position: absolute;
  }
}
.product-landing-page-teaser__image-container {
  width: 100%;
}
@media only screen and (min-width: 550px) {
  .product-landing-page-teaser__image-container {
    width: 35%;
    margin: 3rem 2rem;
  }
}
@media only screen and (min-width: 768px) {
  .product-landing-page-teaser__image-container {
    width: 25%;
  }
}
@media only screen and (min-width: 1024px) {
  .product-landing-page-teaser__image-container {
    width: 25%;
    margin: 7rem 4rem;
  }
}
.product-landing-page-teaser__image-container .image-element {
  margin: 0;
  padding: 0;
}
.product-landing-page-teaser__image-container img {
  width: 100%;
}
.product-landing-page-teaser__image-container--right {
  -webkit-box-ordinal-group: 3;
      -ms-flex-order: 2;
          order: 2;
}
@media only screen and (min-width: 550px) {
  .product-landing-page-teaser__text-container {
    max-width: 50%;
  }
}
@media only screen and (min-width: 1025px) {
  .product-landing-page-teaser__text-container--bottom {
    position: absolute;
    bottom: 0;
  }
}
.product-landing-page-teaser__text-container .headline {
  width: 100%;
  text-transform: uppercase;
  line-height: 1.1;
}
.product-landing-page-teaser__text-container .headline--subheadline {
  display: inline-block;
  margin-top: 3rem;
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 768px) {
  .product-landing-page-teaser__text-container .headline--subheadline {
    margin-top: 0;
  }
}
@media only screen and (min-width: 550px) {
  .product-landing-page-teaser--with-image .product-landing-page-teaser__text-container {
    -ms-flex-item-align: end;
        align-self: flex-end;
  }
}
@media only screen and (min-width: 1024px) {
  .product-landing-page-teaser--with-image .product-landing-page-teaser__text-container {
    max-width: 35%;
  }
}
.product-landing-page-teaser__text {
  font-size: 0.9333333333rem;
}
.product-landing-page-teaser__text--indent {
  padding-left: 5rem;
}
.product-landing-page-teaser__connector-image-container {
  display: none;
  line-height: 0;
}
@media only screen and (max-width: 1024px) {
  .product-landing-page-teaser__connector-image-container {
    width: 70%;
  }
}
@media only screen and (min-width: 1025px) {
  .product-landing-page-teaser__connector-image-container {
    display: block;
    position: relative;
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .product-landing-page-teaser__connector-image-container--left {
    left: 0;
  }
  .product-landing-page-teaser__connector-image-container--right {
    right: 0;
    margin-left: auto;
  }
}
.product-landing-page-teaser .markdown p {
  margin-bottom: 0;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.inspiration-content {
  padding: 0.1333333333rem;
  -ms-flex-preferred-size: 100%;
      flex-basis: 100%;
  overflow: hidden;
}
.inspiration-content__container {
  overflow: hidden;
  position: relative;
  width: 100%;
  height: 100%;
}
@media only screen and (min-width: 768px) {
  .inspiration-content {
    max-height: 33.3333333333rem;
  }
}
.inspiration-content__asset {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  overflow: hidden;
  width: 100%;
  height: 100%;
  -webkit-transform: scale(1);
          transform: scale(1);
  -webkit-transition: -webkit-transform 3s cubic-bezier(0.23, 1, 0.32, 1);
  transition: -webkit-transform 3s cubic-bezier(0.23, 1, 0.32, 1);
  transition: transform 3s cubic-bezier(0.23, 1, 0.32, 1);
  transition: transform 3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 3s cubic-bezier(0.23, 1, 0.32, 1);
}
.inspiration-content__value {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  padding: 1rem;
}
@media only screen and (min-width: 768px) {
  .inspiration-content__value {
    padding: 3rem;
  }
}
.inspiration-content .headline {
  -ms-flex-item-align: end;
      align-self: flex-end;
  color: #fff;
  font-size: 1.4666666667rem;
  font-weight: 700;
}
.inspiration-content__polarlight {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
  -webkit-box-flex: 2;
      -ms-flex-positive: 2;
          flex-grow: 2;
}
.inspiration-content__polarlight .inspiration-content__subline,
.inspiration-content__polarlight .inspiration-content__separator, .inspiration-content__polarlight-link {
  display: none;
  font-weight: 700;
}
.inspiration-content__polarlight-link {
  color: #fff;
  pointer-events: none;
}
.inspiration-content__polarlight-icon {
  color: rgba(255, 255, 255, 0.6);
  font-size: 6rem;
  position: absolute;
  top: 0;
  right: 0;
}
.inspiration-content__textbox .inspiration-content__subline,
.inspiration-content__textbox .inspiration-content__separator,
.inspiration-content__textbox .inspiration-content__text,
.inspiration-content__textbox .inspiration-content__link {
  display: none;
}
.inspiration-content__textbox .inspiration-content__subline,
.inspiration-content__textbox .inspiration-content__text,
.inspiration-content__textbox .inspiration-content__link {
  font-weight: 700;
}
.inspiration-content__textbox .inspiration-content__link.button--link .button__label-container {
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.inspiration-content__textbox .inspiration-content__separator {
  border-width: 1px;
  border-style: solid;
  border-color: #929292;
  border-width: 1px;
  border-style: solid;
  border-color: #929292;
  margin-left: -0.5rem;
  width: 4rem;
}
@media only screen and (min-width: 768px) {
  .inspiration-content__textbox .inspiration-content__separator {
    margin-left: -1rem;
  }
}
.inspiration-content--small {
  -webkit-box-flex: 2;
      -ms-flex-positive: 2;
          flex-grow: 2;
  -ms-flex-preferred-size: 50%;
      flex-basis: 50%;
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .inspiration-content--small {
    width: calc(50% - 0.2666666667rem);
    -ms-flex-preferred-size: calc(50% - 0.2666666667rem);
        flex-basis: calc(50% - 0.2666666667rem);
  }
}
.inspiration-content--medium, .inspiration-content--medium-big, .inspiration-content--big {
  -ms-flex-preferred-size: 100%;
      flex-basis: 100%;
}
@media only screen and (min-width: 768px) {
  .inspiration-content .headline {
    width: 75%;
  }
  .inspiration-content--small {
    -ms-flex-preferred-size: 33.3333333333%;
        flex-basis: 33.3333333333%;
  }
  .inspiration-content--small .headline {
    width: 100%;
  }
  .inspiration-content--medium {
    -ms-flex-preferred-size: 50%;
        flex-basis: 50%;
  }
  .inspiration-content--medium-big {
    -ms-flex-preferred-size: 66.6666666667%;
        flex-basis: 66.6666666667%;
  }
  .inspiration-content--big {
    -ms-flex-preferred-size: 100%;
        flex-basis: 100%;
  }
  .inspiration-content--medium.inspiration-content--is-textbox, .inspiration-content--medium-big.inspiration-content--is-textbox, .inspiration-content--big.inspiration-content--is-textbox {
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .inspiration-content--medium.inspiration-content--is-textbox .button--w-auto, .inspiration-content--medium-big.inspiration-content--is-textbox .button--w-auto, .inspiration-content--big.inspiration-content--is-textbox .button--w-auto {
    max-width: 50%;
    margin-left: auto;
  }
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) and (min-width: 768px) {
  .inspiration-content--small {
    -ms-flex-preferred-size: calc(33.3333333333% - 0.2666666667rem);
        flex-basis: calc(33.3333333333% - 0.2666666667rem);
  }
  .inspiration-content--medium {
    -ms-flex-preferred-size: calc(50% - 0.2666666667rem);
        flex-basis: calc(50% - 0.2666666667rem);
  }
  .inspiration-content--medium-big {
    -ms-flex-preferred-size: calc(66.6666666667% - 0.2666666667rem);
        flex-basis: calc(66.6666666667% - 0.2666666667rem);
  }
}
@media only screen and (min-width: 768px) {
  .inspiration-content--is-polarlight .inspiration-content__value {
    padding: 4rem 6rem 3rem 3rem;
  }
}
@media only screen and (min-width: 550px) {
  .inspiration-content:hover .headline {
    display: none;
  }
  .inspiration-content:hover .inspiration-content__asset {
    -webkit-transform: scale(1.1);
            transform: scale(1.1);
  }
  .inspiration-content:hover.inspiration-content--is-polarlight .inspiration-content__subline,
  .inspiration-content:hover.inspiration-content--is-polarlight .inspiration-content__separator,
  .inspiration-content:hover.inspiration-content--is-polarlight .inspiration-content__polarlight-link {
    display: block;
    color: #4b4b4d;
  }
  .inspiration-content:hover.inspiration-content--is-polarlight .inspiration-content__value {
    background-color: rgba(255, 255, 255, 0.5);
    padding: 4rem 6rem 3rem 2rem;
  }
  .inspiration-content:hover.inspiration-content--is-polarlight .inspiration-content__polarlight-icon {
    color: #fecc00;
  }
  .inspiration-content:hover.inspiration-content--is-polarlight .inspiration-content__polarlight-link {
    pointer-events: auto;
  }
  .inspiration-content:hover.inspiration-content--is-polarlight .inspiration-content--small .inspiration-content__value {
    background-color: rgba(255, 255, 255, 0.5);
    padding: 4rem 4rem 3rem 2rem;
  }
  .inspiration-content:hover.inspiration-content--is-polarlight .inspiration-content--small .inspiration-content__polarlight {
    text-align: right;
  }
  .inspiration-content:hover.inspiration-content--is-polarlight .inspiration-content--small .inspiration-content__subline {
    -ms-flex-preferred-size: 60%;
        flex-basis: 60%;
  }
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__value {
    background-color: rgba(255, 242, 189, 0.8);
  }
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__subline,
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__separator,
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__text,
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__link {
    display: block;
  }
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__subline,
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__text,
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__link {
    color: #4b4b4d;
    font-weight: 700;
  }
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__link {
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__link:hover, .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__link:focus, .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__link:active {
    color: #fff;
  }
  .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__link.button--link:hover, .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__link.button--link:focus, .inspiration-content:hover.inspiration-content--is-textbox .inspiration-content__link.button--link:active {
    color: #4b4b4d;
  }
}
.inspiration-content .seo-image__image {
  height: 100%;
}

.product-landing-page-use-case {
  padding: 0.1333333333rem;
  -ms-flex-preferred-size: 100%;
      flex-basis: 100%;
  overflow: hidden;
}
.product-landing-page-use-case__container {
  overflow: hidden;
  position: relative;
  width: 100%;
  height: 100%;
}
@media only screen and (min-width: 768px) {
  .product-landing-page-use-case {
    max-height: 33.3333333333rem;
  }
}
.product-landing-page-use-case__asset {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  overflow: hidden;
  width: 100%;
  height: 100%;
  -webkit-transform: scale(1);
          transform: scale(1);
  -webkit-transition: -webkit-transform 3s cubic-bezier(0.23, 1, 0.32, 1);
  transition: -webkit-transform 3s cubic-bezier(0.23, 1, 0.32, 1);
  transition: transform 3s cubic-bezier(0.23, 1, 0.32, 1);
  transition: transform 3s cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 3s cubic-bezier(0.23, 1, 0.32, 1);
}
.product-landing-page-use-case__value {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  padding: 1rem;
}
@media only screen and (min-width: 768px) {
  .product-landing-page-use-case__value {
    padding: 3rem;
  }
}
.product-landing-page-use-case .headline {
  -ms-flex-item-align: end;
      align-self: flex-end;
  color: #fff;
  font-size: 1.4666666667rem;
  font-weight: 700;
}
.product-landing-page-use-case__polarlight {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
  -webkit-box-flex: 2;
      -ms-flex-positive: 2;
          flex-grow: 2;
}
.product-landing-page-use-case__polarlight .product-landing-page-use-case__subline,
.product-landing-page-use-case__polarlight .product-landing-page-use-case__separator, .product-landing-page-use-case__polarlight-link {
  display: none;
  font-weight: 700;
}
.product-landing-page-use-case__polarlight-link {
  color: #fff;
  pointer-events: none;
}
.product-landing-page-use-case__polarlight-icon {
  color: rgba(255, 255, 255, 0.6);
  font-size: 6rem;
  position: absolute;
  top: 0;
  right: 0;
}
.product-landing-page-use-case__textbox .product-landing-page-use-case__subline,
.product-landing-page-use-case__textbox .product-landing-page-use-case__separator,
.product-landing-page-use-case__textbox .product-landing-page-use-case__text,
.product-landing-page-use-case__textbox .product-landing-page-use-case__link {
  display: none;
}
.product-landing-page-use-case__textbox .product-landing-page-use-case__subline,
.product-landing-page-use-case__textbox .product-landing-page-use-case__text,
.product-landing-page-use-case__textbox .product-landing-page-use-case__link {
  font-weight: 700;
}
.product-landing-page-use-case__textbox .product-landing-page-use-case__link.button--link .button__label-container {
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
}
.product-landing-page-use-case__textbox .product-landing-page-use-case__separator {
  border-width: 1px;
  border-style: solid;
  border-color: #929292;
  border-width: 1px;
  border-style: solid;
  border-color: #929292;
  margin-left: -0.5rem;
  width: 4rem;
}
@media only screen and (min-width: 768px) {
  .product-landing-page-use-case__textbox .product-landing-page-use-case__separator {
    margin-left: -1rem;
  }
}
.product-landing-page-use-case--small {
  -webkit-box-flex: 2;
      -ms-flex-positive: 2;
          flex-grow: 2;
  -ms-flex-preferred-size: 50%;
      flex-basis: 50%;
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .product-landing-page-use-case--small {
    width: calc(50% - 0.2666666667rem);
    -ms-flex-preferred-size: calc(50% - 0.2666666667rem);
        flex-basis: calc(50% - 0.2666666667rem);
  }
}
.product-landing-page-use-case--medium, .product-landing-page-use-case--medium-big, .product-landing-page-use-case--big {
  -ms-flex-preferred-size: 100%;
      flex-basis: 100%;
}
@media only screen and (min-width: 768px) {
  .product-landing-page-use-case .headline {
    width: 75%;
  }
  .product-landing-page-use-case--small {
    -ms-flex-preferred-size: 33.3333333333%;
        flex-basis: 33.3333333333%;
  }
  .product-landing-page-use-case--small .headline {
    width: 100%;
  }
  .product-landing-page-use-case--medium {
    -ms-flex-preferred-size: 50%;
        flex-basis: 50%;
  }
  .product-landing-page-use-case--medium-big {
    -ms-flex-preferred-size: 66.6666666667%;
        flex-basis: 66.6666666667%;
  }
  .product-landing-page-use-case--big {
    -ms-flex-preferred-size: 100%;
        flex-basis: 100%;
  }
  .product-landing-page-use-case--medium.product-landing-page-use-case--is-textbox, .product-landing-page-use-case--medium-big.product-landing-page-use-case--is-textbox, .product-landing-page-use-case--big.product-landing-page-use-case--is-textbox {
    /* stylelint-disable-next-line max-nesting-depth */
  }
  .product-landing-page-use-case--medium.product-landing-page-use-case--is-textbox .button--w-auto, .product-landing-page-use-case--medium-big.product-landing-page-use-case--is-textbox .button--w-auto, .product-landing-page-use-case--big.product-landing-page-use-case--is-textbox .button--w-auto {
    max-width: 50%;
    margin-left: auto;
  }
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) and (min-width: 768px) {
  .product-landing-page-use-case--small {
    -ms-flex-preferred-size: calc(33.3333333333% - 0.2666666667rem);
        flex-basis: calc(33.3333333333% - 0.2666666667rem);
  }
  .product-landing-page-use-case--medium {
    -ms-flex-preferred-size: calc(50% - 0.2666666667rem);
        flex-basis: calc(50% - 0.2666666667rem);
  }
  .product-landing-page-use-case--medium-big {
    -ms-flex-preferred-size: calc(66.6666666667% - 0.2666666667rem);
        flex-basis: calc(66.6666666667% - 0.2666666667rem);
  }
}
@media only screen and (min-width: 768px) {
  .product-landing-page-use-case--is-polarlight .product-landing-page-use-case__value {
    padding: 4rem 6rem 3rem 3rem;
  }
}
@media only screen and (min-width: 550px) {
  .product-landing-page-use-case:hover .headline {
    display: none;
  }
  .product-landing-page-use-case:hover .product-landing-page-use-case__asset {
    -webkit-transform: scale(1.1);
            transform: scale(1.1);
  }
  .product-landing-page-use-case:hover.product-landing-page-use-case--is-polarlight .product-landing-page-use-case__subline,
  .product-landing-page-use-case:hover.product-landing-page-use-case--is-polarlight .product-landing-page-use-case__separator,
  .product-landing-page-use-case:hover.product-landing-page-use-case--is-polarlight .product-landing-page-use-case__polarlight-link {
    display: block;
    color: #4b4b4d;
  }
  .product-landing-page-use-case:hover.product-landing-page-use-case--is-polarlight .product-landing-page-use-case__value {
    background-color: rgba(255, 255, 255, 0.5);
    padding: 4rem 6rem 3rem 2rem;
  }
  .product-landing-page-use-case:hover.product-landing-page-use-case--is-polarlight .product-landing-page-use-case__polarlight-icon {
    color: #fecc00;
  }
  .product-landing-page-use-case:hover.product-landing-page-use-case--is-polarlight .product-landing-page-use-case__polarlight-link {
    pointer-events: auto;
  }
  .product-landing-page-use-case:hover.product-landing-page-use-case--is-polarlight .product-landing-page-use-case--small .product-landing-page-use-case__value {
    background-color: rgba(255, 255, 255, 0.5);
    padding: 4rem 4rem 3rem 2rem;
  }
  .product-landing-page-use-case:hover.product-landing-page-use-case--is-polarlight .product-landing-page-use-case--small .product-landing-page-use-case__polarlight {
    text-align: right;
  }
  .product-landing-page-use-case:hover.product-landing-page-use-case--is-polarlight .product-landing-page-use-case--small .product-landing-page-use-case__subline {
    -ms-flex-preferred-size: 60%;
        flex-basis: 60%;
  }
  .product-landing-page-use-case:hover.product-landing-page-use-case--is-textbox .product-landing-page-use-case__value {
    background-color: rgba(255, 242, 189, 0.8);
  }
  .product-landing-page-use-case:hover.product-landing-page-use-case--is-textbox .product-landing-page-use-case__subline,
  .product-landing-page-use-case:hover.product-landing-page-use-case--is-textbox .product-landing-page-use-case__separator,
  .product-landing-page-use-case:hover.product-landing-page-use-case--is-textbox .product-landing-page-use-case__text,
  .product-landing-page-use-case:hover.product-landing-page-use-case--is-textbox .product-landing-page-use-case__link {
    display: block;
  }
  .product-landing-page-use-case:hover.product-landing-page-use-case--is-textbox .product-landing-page-use-case__subline,
  .product-landing-page-use-case:hover.product-landing-page-use-case--is-textbox .product-landing-page-use-case__text,
  .product-landing-page-use-case:hover.product-landing-page-use-case--is-textbox .product-landing-page-use-case__link {
    color: #4b4b4d;
    font-weight: 700;
  }
  .product-landing-page-use-case:hover.product-landing-page-use-case--is-textbox .product-landing-page-use-case__link {
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .product-landing-page-use-case:hover.product-landing-page-use-case--is-textbox .product-landing-page-use-case__link:hover, .product-landing-page-use-case:hover.product-landing-page-use-case--is-textbox .product-landing-page-use-case__link:focus, .product-landing-page-use-case:hover.product-landing-page-use-case--is-textbox .product-landing-page-use-case__link:active {
    color: #fff;
  }
  .product-landing-page-use-case:hover.product-landing-page-use-case--is-textbox .product-landing-page-use-case__link.button--link:hover, .product-landing-page-use-case:hover.product-landing-page-use-case--is-textbox .product-landing-page-use-case__link.button--link:focus, .product-landing-page-use-case:hover.product-landing-page-use-case--is-textbox .product-landing-page-use-case__link.button--link:active {
    color: #4b4b4d;
  }
}
.product-landing-page-use-case .seo-image__image {
  height: 100%;
}

.product-landing-page-use-case {
  -webkit-box-flex: 0;
      -ms-flex-positive: 0;
          flex-grow: 0;
  width: 50%;
  -ms-flex-preferred-size: 50%;
      flex-basis: 50%;
  padding: 0;
  margin-bottom: 0;
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .product-landing-page-use-case {
    width: calc(50% - 0.5rem);
    -ms-flex-preferred-size: calc(50% - 0.5rem);
        flex-basis: calc(50% - 0.5rem);
  }
}
@media only screen and (min-width: 550px) {
  .product-landing-page-use-case {
    padding: 0.25rem;
    margin-bottom: 0;
  }
}
.product-landing-page-use-case__polarlight-icon {
  display: none;
}
.product-landing-page-use-case__configurator-link {
  display: none;
  position: absolute;
  width: 100%;
  height: 100%;
  cursor: pointer;
  pointer-events: none;
}
@media only screen and (min-width: 1025px) {
  .product-landing-page-use-case__configurator-link {
    pointer-events: initial;
  }
}
.product-landing-page-use-case:hover .product-landing-page-use-case__polarlight-icon {
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 550px) {
  .product-landing-page-use-case:hover .product-landing-page-use-case__polarlight-icon {
    display: block;
  }
}
.product-landing-page-use-case:hover .product-landing-page-use-case__configurator-link {
  display: block;
}
.product-landing-page-use-case .image-element {
  margin: 0;
  padding: 0;
}
.product-landing-page-use-case .image-element .image {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media only screen and (min-width: 768px) {
  .product-landing-page-use-case--col-3.product-landing-page-use-case {
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .product-landing-page-use-case--col-3.product-landing-page-use-case--small {
    width: calc(100% / 3);
    -ms-flex-preferred-size: calc(100% / 3);
        flex-basis: calc(100% / 3);
  }
  .product-landing-page-use-case--col-3.product-landing-page-use-case--medium {
    width: calc(100% / 3 * 2);
    -ms-flex-preferred-size: calc(100% / 3 * 2);
        flex-basis: calc(100% / 3 * 2);
  }
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) and (min-width: 768px) {
  .product-landing-page-use-case--col-3.product-landing-page-use-case {
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .product-landing-page-use-case--col-3.product-landing-page-use-case--small {
    width: calc(100% / 3 - 0.5rem);
    -ms-flex-preferred-size: calc(100% / 3 - 0.5rem);
        flex-basis: calc(100% / 3 - 0.5rem);
  }
  .product-landing-page-use-case--col-3.product-landing-page-use-case--medium {
    width: calc(100% / 3 * 2 - 0.5rem);
    -ms-flex-preferred-size: calc(100% / 3 * 2 - 0.5rem);
        flex-basis: calc(100% / 3 * 2 - 0.5rem);
  }
}
@media only screen and (min-width: 768px) {
  .product-landing-page-use-case--col-4.product-landing-page-use-case {
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .product-landing-page-use-case--col-4.product-landing-page-use-case--small {
    width: calc(100% / 4);
    -ms-flex-preferred-size: calc(100% / 4);
        flex-basis: calc(100% / 4);
  }
  .product-landing-page-use-case--col-4.product-landing-page-use-case--medium {
    width: calc(100% / 4 * 2);
    -ms-flex-preferred-size: calc(100% / 4 * 2);
        flex-basis: calc(100% / 4 * 2);
  }
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) and (min-width: 768px) {
  .product-landing-page-use-case--col-4.product-landing-page-use-case {
    /* stylelint-disable max-nesting-depth */
    /* stylelint-enable max-nesting-depth */
  }
  .product-landing-page-use-case--col-4.product-landing-page-use-case--small {
    width: calc(100% / 4 - 0.5rem);
    -ms-flex-preferred-size: calc(100% / 4 - 0.5rem);
        flex-basis: calc(100% / 4 - 0.5rem);
  }
  .product-landing-page-use-case--col-4.product-landing-page-use-case--medium {
    width: calc(100% / 4 * 2 - 0.5rem);
    -ms-flex-preferred-size: calc(100% / 4 * 2 - 0.5rem);
        flex-basis: calc(100% / 4 * 2 - 0.5rem);
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-landing-page-use-case-hero-teaser {
  margin: 4rem 0;
}
.product-landing-page-use-case-hero-teaser__container::before {
  content: "";
  width: 200vw;
  height: 100vh;
  background-image: linear-gradient(150deg, #4b4b4d, #1a171b);
  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
  background-image: url("/assets/images/grain_pattern.png"), linear-gradient(150deg, #4b4b4d, #1a171b);
  position: absolute;
  z-index: -1;
  left: -50vw;
  top: 0;
  -webkit-transform: rotate(5deg);
          transform: rotate(5deg);
}
@media only screen and (min-width: 1024px) {
  .product-landing-page-use-case-hero-teaser__container::before {
    top: -30vh;
  }
}
.product-landing-page-use-case-hero-teaser__link-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  -ms-flex-line-pack: center;
      align-content: center;
}
@media only screen and (min-width: 1024px) {
  .product-landing-page-use-case-hero-teaser__text {
    max-width: 60%;
  }
}
.product-landing-page-use-case-hero-teaser .headline {
  font-size: 1.2rem;
}
@media only screen and (min-width: 1024px) {
  .product-landing-page-use-case-hero-teaser .headline {
    font-size: 1.4666666667rem;
  }
}
.product-landing-page-use-case-hero-teaser .cta-button-numinos .button {
  color: #929292;
  font-size: 2rem;
  font-weight: 300;
  text-decoration: none;
}
@media only screen and (min-width: 1024px) {
  .product-landing-page-use-case-hero-teaser .cta-button-numinos .button {
    text-transform: uppercase;
    font-size: 2.4rem;
  }
}
.product-landing-page-use-case-hero-teaser .cta-button-numinos .button__label-container {
  text-decoration: none;
}
.product-landing-page-use-case-hero-teaser .cta-button-numinos + .cta-button-numinos::before {
  content: "/";
  font-size: 2rem;
  font-weight: 300;
  color: #fff;
  margin: 0 0.5rem 0 1rem;
  line-height: 0;
}
@media only screen and (min-width: 1024px) {
  .product-landing-page-use-case-hero-teaser .cta-button-numinos + .cta-button-numinos::before {
    margin: 0 1rem 0 1.5rem;
    font-size: 2.4rem;
  }
}
.product-landing-page-use-case-hero-teaser .cta-button-numinos.active .button {
  color: #fff;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.quote-element .icon {
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  height: 4rem;
}
.quote-element .icon svg {
  fill: #b2b2b2;
  width: 3.3333333333rem;
  height: 3.3333333333rem;
  min-width: unset;
}
.quote-element__content-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
@media only screen and (min-width: 768px) {
  .quote-element__content-container {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    -webkit-box-pack: justify;
        -ms-flex-pack: justify;
            justify-content: space-between;
  }
}
@media only screen and (min-width: 768px) {
  .quote-element__content-container .quote-element__image-container {
    margin-right: 2rem;
  }
}
@media only screen and (min-width: 768px) {
  .quote-element__content-container--right {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: reverse;
        -ms-flex-direction: row-reverse;
            flex-direction: row-reverse;
  }
  .quote-element__content-container--right .quote-element__image-container {
    margin-left: 2rem;
    margin-right: 0;
  }
}
.quote-element__author-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: flex-end;
  -webkit-box-align: end;
      -ms-flex-align: end;
          align-items: flex-end;
}
.quote-element__author-container .icon {
  padding-right: 1rem;
  -webkit-transform: rotate(180deg);
          transform: rotate(180deg);
}
.quote-element__image-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.quote-element__image-container .image__image {
  width: 13.9333333333rem;
  min-width: 13.9333333333rem;
}
.quote-element__image-container--image-is-round .image__image {
  border-radius: 50%;
}
.quote-element__quote {
  font-size: 1.2rem;
  line-height: 1.7333333333rem;
  text-transform: uppercase;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.service-sidebar {
  left: 0;
  position: relative;
  min-height: 16.6666666667rem;
}
.service-sidebar__container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-align: end;
      -ms-flex-align: end;
          align-items: flex-end;
}
.service-sidebar__content {
  display: none;
}
@media only screen and (min-width: 550px) {
  .service-sidebar__content {
    display: block;
  }
}
.service-sidebar.grid {
  max-width: 26.6666666667rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.service-sidebar-content {
  width: 100%;
  padding: 1rem;
  word-break: break-word;
}
.service-sidebar-content:not(:last-child) {
  border-bottom-width: 1px;
  border-style: solid;
  border-color: #d0d0d0;
}
.service-sidebar-content__header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}
.service-sidebar-content__header-icon {
  font-size: 2.2666666667rem;
  margin-right: 0.5rem;
  width: 3rem;
  height: 3rem;
}
.service-sidebar-content__header .headline-group {
  margin-top: 0;
  max-width: 80%;
}
.service-sidebar-content__header .headline-group .headline {
  margin-bottom: 0;
}
.service-sidebar-content .icon-box {
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  padding: 0;
  margin: 1rem 0;
}
.service-sidebar-content .icon-box__icon {
  margin-right: 1rem;
}
.service-sidebar-content .icon-box__icon svg {
  width: 2.2666666667rem;
  height: 2.2666666667rem;
}
.service-sidebar-content__ctas {
  margin-top: 3rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.keen-slider {
  -webkit-user-select: auto;
     -moz-user-select: auto;
      -ms-user-select: auto;
          user-select: auto;
}

.teaser-box__text ul {
  margin: 1rem 0;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.text-element ul li,
.text-element ol li {
  line-height: 1.5;
}
.text-element ul {
  padding-left: 0.5rem;
}
.text-element ol {
  padding-left: 2rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.video {
  width: 100%;
  overflow: hidden;
}
.video video {
  width: 100%;
}
.video__youtube {
  width: 100%;
  position: relative;
  padding-bottom: calc(50% + 1.5rem);
  padding-top: 1.5rem;
  height: 0;
}
.video__youtube iframe,
.video__youtube object,
.video__youtube embed {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.zoom-overlay {
  z-index: 1000;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  position: fixed;
  background-color: rgba(0, 0, 0, 0.5);
  -webkit-transform: scale(1.1);
          transform: scale(1.1);
  -webkit-transition: visibility 0s linear 0.25s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s, -webkit-transform 0.25s;
}
.zoom-overlay__background {
  position: absolute;
  width: 100%;
  height: 100%;
}
.zoom-overlay__container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  width: 100%;
  height: 100%;
}
.zoom-overlay__image {
  max-height: 62vh;
  width: auto;
}
.zoom-overlay__slider {
  min-width: 60vw;
  max-width: 60vw;
  max-height: 62vh;
}
@media only screen and (min-width: 1024px) {
  .zoom-overlay__slider {
    width: auto;
    max-height: 50vh;
  }
}
@media only screen and (max-width: 549px) {
  .zoom-overlay__slider {
    width: 100%;
    max-width: 100vw;
    -webkit-box-ordinal-group: 1;
        -ms-flex-order: 0;
            order: 0;
  }
}
@media only screen and (min-width: 1024px) {
  .zoom-overlay__slider--single-image {
    max-height: 80vh;
  }
}
.zoom-overlay__slider--single-image .image__image {
  width: auto;
}
.zoom-overlay__slider-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  margin-top: 3rem;
}
@media only screen and (min-width: 768px) {
  .zoom-overlay__slider-container {
    -ms-flex-wrap: nowrap;
        flex-wrap: nowrap;
  }
}
.zoom-overlay__slider .image-element .image__image {
  width: auto;
  max-height: 62vh;
  -o-object-fit: contain;
     object-fit: contain;
  margin: 0 auto;
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 1024px) {
  .zoom-overlay__slider .image-element .image__image {
    max-height: 50vh;
  }
}
.zoom-overlay .keen-slider-carousel__arrow {
  position: relative;
}
.zoom-overlay .keen-slider-carousel__arrow--prev {
  left: unset;
  margin-right: 1rem;
}
.zoom-overlay .keen-slider-carousel__arrow--next {
  right: unset;
  margin-left: 1rem;
}
@media only screen and (max-width: 549px) {
  .zoom-overlay .keen-slider-carousel__arrow {
    margin-top: 1rem;
  }
  .zoom-overlay .keen-slider-carousel__arrow--prev {
    -webkit-box-ordinal-group: 2;
        -ms-flex-order: 1;
            order: 1;
  }
  .zoom-overlay .keen-slider-carousel__arrow--next {
    -webkit-box-ordinal-group: 3;
        -ms-flex-order: 2;
            order: 2;
  }
}
.zoom-overlay__slide {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  max-height: 80vh;
}
.zoom-overlay__close-button {
  position: absolute;
  right: 2rem;
  top: 3rem;
  width: 2.4rem;
  height: 2.4rem;
}
@media only screen and (min-width: 550px) {
  .zoom-overlay__close-button {
    right: 3rem;
    top: 3rem;
  }
}
@media only screen and (min-width: 768px) {
  .zoom-overlay__close-button {
    right: 4rem;
    top: 3rem;
  }
}
@media only screen and (min-width: 1024px) {
  .zoom-overlay__close-button {
    right: 6rem;
    top: 4rem;
  }
}
@media only screen and (min-width: 1920px) {
  .zoom-overlay__close-button {
    right: 7rem;
    top: 4rem;
  }
}
.zoom-overlay__close-button svg {
  width: 2.4rem;
  height: 2.4rem;
}
.zoom-overlay__close-button svg {
  fill: #fff;
}
.zoom-overlay__close-button:hover {
  cursor: pointer;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.accordion-element .accordion-element-row {
  border-top: 0.0666666667rem solid #ececec;
}
.accordion-element .accordion-element-row:last-child {
  border-bottom: 0.0666666667rem solid #ececec;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.catalog-element {
  padding-right: 0;
}
@media only screen and (min-width: 768px) {
  .catalog-element {
    padding-right: 1rem;
  }
}
@media only screen and (min-width: 1024px) {
  .catalog-element__container {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -ms-flex-wrap: wrap;
        flex-wrap: wrap;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.container-element {
  background-color: #ececec;
  color: #4b4b4d;
  border-bottom-right-radius: 35px;
  padding: 2rem 0 0.25rem;
}
.container-element svg {
  fill: #4b4b4d;
}
.container-element .keen-slider-carousel__dot:not(.active) {
  border-width: 0.4666666667rem;
  border-style: solid;
  border-color: #d0d0d0;
  background: #d0d0d0;
}
.container-element .image-slider .icon-button__icon--bg-controls-overlay, .container-element .image-slider .icon-button__hover-icon--bg-controls-overlay {
  background-color: rgba(255, 255, 255, 0.6);
}
.container-element--slvtec {
  background-color: #01a3ec;
  color: #4b4b4d;
}
.container-element--slvtec .button {
  background-color: #4b4b4d;
  color: #fff;
  border-color: #4b4b4d;
}
.container-element--slvtec .button .icon > svg {
  fill: #fff;
}
.container-element--slvtec .button--no-padding {
  background-color: #01a3ec;
  color: #fff;
}
.container-element--slvtec .headline-group .headline {
  color: #4b4b4d;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.content-slider {
  width: 100%;
  padding-right: 0;
}
@media only screen and (min-width: 768px) {
  .content-slider {
    padding-right: 1rem;
  }
}
@media only screen and (min-width: 1024px) {
  .content-slider {
    padding-left: 8.3333333333%;
  }
}
.content-slider > .headline-group {
  margin-left: -1rem;
}
@media only screen and (min-width: 1024px) {
  .content-slider > .headline-group {
    margin-left: -8.3333333333%;
  }
}
.content-slider__hero-container {
  margin-bottom: 1.5rem;
  padding-right: 1rem;
}
@media only screen and (min-width: 1024px) {
  .content-slider__hero-container {
    margin-bottom: 0;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.form-element {
  min-height: 16.6666666667rem;
  position: relative;
}
.form-element .loading-indicator {
  z-index: 300;
}
.form-element--error {
  min-height: auto;
  height: 0;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.gallery-element {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
.gallery-element__container {
  /* stylelint-disable declaration-block-no-redundant-longhand-properties */
  display: grid;
  grid-template-columns: repeat(8, calc(12.5% - 0.45rem));
  grid-template-rows: repeat(8, calc(12.5% - 0.45rem));
  grid-template-areas: "box-1 box-1 box-1 box-1 box-2 box-2 box-2 box-2" "box-1 box-1 box-1 box-1 box-2 box-2 box-2 box-2" "box-1 box-1 box-1 box-1 box-2 box-2 box-2 box-2" "box-5 box-5 box-5 box-5 box-2 box-2 box-2 box-2" "box-5 box-5 box-5 box-5 box-6 box-6 box-7 box-7" "box-5 box-5 box-5 box-5 box-6 box-6 box-7 box-7" "box-8 box-8 box-8 box-8 box-6 box-6 box-7 box-7" "box-8 box-8 box-8 box-8 box-9 box-9 box-9 box-9" "box-8 box-8 box-8 box-8 box-9 box-9 box-9 box-9";
  grid-gap: 0.5rem;
  width: 100%;
  /* stylelint-enable declaration-block-no-redundant-longhand-properties */
}
.gallery-element__container.expand {
  grid-template-columns: repeat(8, calc(12.5% - 0.45rem));
  grid-template-rows: repeat(16, calc(6.25% - 0.45rem));
  grid-template-areas: "box-1 box-1 box-1 box-1 box-2 box-2 box-2 box-2" "box-1 box-1 box-1 box-1 box-2 box-2 box-2 box-2" "box-1 box-1 box-1 box-1 box-2 box-2 box-2 box-2" "box-5 box-5 box-5 box-5 box-2 box-2 box-2 box-2" "box-5 box-5 box-5 box-5 box-6 box-6 box-7 box-7" "box-5 box-5 box-5 box-5 box-6 box-6 box-7 box-7" "box-8 box-8 box-8 box-8 box-6 box-6 box-7 box-7" "box-8 box-8 box-8 box-8 box-9 box-9 box-9 box-9" "box-8 box-8 box-8 box-8 box-9 box-9 box-9 box-9" "box-3 box-3 box-3 box-3 box-3 box-3 box-4 box-4" "box-3 box-3 box-3 box-3 box-3 box-3 box-4 box-4" "box-3 box-3 box-3 box-3 box-3 box-3 box-4 box-4" "box-3 box-3 box-3 box-3 box-3 box-3 box-4 box-4" "box-10 box-10 box-10 box-10 box-11 box-11 box-11 box-11" "box-10 box-10 box-10 box-10 box-11 box-11 box-11 box-11" "box-10 box-10 box-10 box-10 box-11 box-11 box-11 box-11" "box-10 box-10 box-10 box-10 box-11 box-11 box-11 box-11";
}
@media only screen and (min-width: 768px) {
  .gallery-element__container.expand {
    grid-template-columns: repeat(16, 1fr);
    grid-template-rows: repeat(8, 1fr);
    grid-template-areas: "box-1 box-1 box-1 box-1 box-2 box-2 box-2 box-3 box-3 box-3 box-3 box-3 box-3 box-3 box-4 box-4" "box-1 box-1 box-1 box-1 box-2 box-2 box-2 box-3 box-3 box-3 box-3 box-3 box-3 box-3 box-4 box-4" "box-1 box-1 box-1 box-1 box-2 box-2 box-2 box-3 box-3 box-3 box-3 box-3 box-3 box-3 box-4 box-4" "box-5 box-5 box-5 box-5 box-2 box-2 box-2 box-3 box-3 box-3 box-3 box-3 box-3 box-3 box-4 box-4" "box-5 box-5 box-5 box-5 box-6 box-6 box-7 box-7 box-10 box-10 box-10 box-10 box-11 box-11 box-11 box-11" "box-8 box-8 box-8 box-8 box-6 box-6 box-7 box-7 box-10 box-10 box-10 box-10 box-11 box-11 box-11 box-11" "box-8 box-8 box-8 box-8 box-9 box-9 box-9 box-9 box-10 box-10 box-10 box-10 box-11 box-11 box-11 box-11" "box-8 box-8 box-8 box-8 box-9 box-9 box-9 box-9 box-10 box-10 box-10 box-10 box-11 box-11 box-11 box-11";
  }
}
.gallery-element__container.expand .gallery-element__box {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
@media only screen and (min-width: 768px) {
  .gallery-element__container {
    grid-template-columns: repeat(16, 1fr);
    grid-template-rows: repeat(8, 1fr);
    grid-template-areas: "box-1 box-1 box-1 box-1 box-2 box-2 box-2 box-3 box-3 box-3 box-3 box-3 box-3 box-3 box-4 box-4" "box-1 box-1 box-1 box-1 box-2 box-2 box-2 box-3 box-3 box-3 box-3 box-3 box-3 box-3 box-4 box-4" "box-1 box-1 box-1 box-1 box-2 box-2 box-2 box-3 box-3 box-3 box-3 box-3 box-3 box-3 box-4 box-4" "box-5 box-5 box-5 box-5 box-2 box-2 box-2 box-3 box-3 box-3 box-3 box-3 box-3 box-3 box-4 box-4" "box-5 box-5 box-5 box-5 box-6 box-6 box-7 box-7 box-10 box-10 box-10 box-10 box-11 box-11 box-11 box-11" "box-8 box-8 box-8 box-8 box-6 box-6 box-7 box-7 box-10 box-10 box-10 box-10 box-11 box-11 box-11 box-11" "box-8 box-8 box-8 box-8 box-9 box-9 box-9 box-9 box-10 box-10 box-10 box-10 box-11 box-11 box-11 box-11" "box-8 box-8 box-8 box-8 box-9 box-9 box-9 box-9 box-10 box-10 box-10 box-10 box-11 box-11 box-11 box-11";
  }
}
.gallery-element__container .image-element .image {
  /* stylelint-disable-next-line max-nesting-depth */
}
.gallery-element__container .image-element .image__image {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -o-object-fit: cover;
     object-fit: cover;
}
.gallery-element .image-element {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  padding: 0;
  margin: 0;
}
.gallery-element .image-element .image {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}
.gallery-element .image-element .image__image {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -o-object-fit: cover;
     object-fit: cover;
}
.gallery-element__box-1 {
  grid-area: box-1;
  cursor: pointer;
}
.gallery-element__box-2 {
  grid-area: box-2;
  cursor: pointer;
}
.gallery-element__box-3 {
  grid-area: box-3;
  cursor: pointer;
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
@media only screen and (max-width: 767px) {
  .gallery-element__box-3.image-element {
    display: none;
  }
}
.gallery-element__box-4 {
  grid-area: box-4;
  cursor: pointer;
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
@media only screen and (max-width: 767px) {
  .gallery-element__box-4.image-element {
    display: none;
  }
}
.gallery-element__box-5 {
  grid-area: box-5;
  cursor: pointer;
}
.gallery-element__box-6 {
  grid-area: box-6;
  cursor: pointer;
}
.gallery-element__box-7 {
  grid-area: box-7;
  cursor: pointer;
}
.gallery-element__box-8 {
  grid-area: box-8;
  cursor: pointer;
}
.gallery-element__box-9 {
  grid-area: box-9;
  cursor: pointer;
}
.gallery-element__box-10 {
  grid-area: box-10;
  cursor: pointer;
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
@media only screen and (max-width: 767px) {
  .gallery-element__box-10.image-element {
    display: none;
  }
}
.gallery-element__box-11 {
  grid-area: box-11;
  cursor: pointer;
  /* stylelint-disable max-nesting-depth */
  /* stylelint-enable max-nesting-depth */
}
@media only screen and (max-width: 767px) {
  .gallery-element__box-11.image-element {
    display: none;
  }
}
.gallery-element__overlay {
  z-index: 1000;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  position: fixed;
  background-color: rgba(0, 0, 0, 0.5);
  -webkit-transform: scale(1.1);
          transform: scale(1.1);
  -webkit-transition: visibility 0s linear 0.25s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, -webkit-transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s;
  transition: visibility 0s linear 0.25s, opacity 0.25s 0s, transform 0.25s, -webkit-transform 0.25s;
}
.gallery-element__overlay-background {
  position: absolute;
  width: 100%;
  height: 100%;
}
.gallery-element__overlay-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  width: 100%;
  height: 100%;
}
.gallery-element__overlay .image-element .image {
  /* stylelint-disable-next-line max-nesting-depth */
}
.gallery-element__overlay .image-element .image__image {
  -o-object-fit: contain;
     object-fit: contain;
}
.gallery-element__slider {
  max-width: 60vw;
  max-height: 80vh;
}
@media only screen and (min-width: 1024px) {
  .gallery-element__slider {
    width: auto;
    max-height: 50vh;
  }
}
@media only screen and (max-width: 549px) {
  .gallery-element__slider {
    width: 100%;
    max-width: 100vw;
    -webkit-box-ordinal-group: 1;
        -ms-flex-order: 0;
            order: 0;
  }
}
.gallery-element__slider-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
}
@media only screen and (min-width: 768px) {
  .gallery-element__slider-container {
    -ms-flex-wrap: nowrap;
        flex-wrap: nowrap;
  }
}
.gallery-element__slider .image-element .image__image {
  width: auto;
  max-height: 80vh;
  -o-object-fit: contain;
     object-fit: contain;
  margin: 0 auto;
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 1024px) {
  .gallery-element__slider .image-element .image__image {
    max-height: 50vh;
  }
}
.gallery-element .keen-slider-carousel__arrow {
  position: relative;
}
.gallery-element .keen-slider-carousel__arrow--prev {
  left: unset;
  margin-right: 1rem;
}
.gallery-element .keen-slider-carousel__arrow--next {
  right: unset;
  margin-left: 1rem;
}
@media only screen and (max-width: 549px) {
  .gallery-element .keen-slider-carousel__arrow {
    margin-top: 1rem;
  }
  .gallery-element .keen-slider-carousel__arrow--prev {
    -webkit-box-ordinal-group: 2;
        -ms-flex-order: 1;
            order: 1;
  }
  .gallery-element .keen-slider-carousel__arrow--next {
    -webkit-box-ordinal-group: 3;
        -ms-flex-order: 2;
            order: 2;
  }
}
.gallery-element__close-button {
  position: absolute;
  right: 2rem;
  top: 3rem;
  width: 2.4rem;
  height: 2.4rem;
  z-index: 1001;
}
@media only screen and (min-width: 550px) {
  .gallery-element__close-button {
    right: 3rem;
    top: 3rem;
  }
}
@media only screen and (min-width: 768px) {
  .gallery-element__close-button {
    right: 4rem;
    top: 3rem;
  }
}
@media only screen and (min-width: 1024px) {
  .gallery-element__close-button {
    right: 6rem;
    top: 4rem;
  }
}
@media only screen and (min-width: 1920px) {
  .gallery-element__close-button {
    right: 7rem;
    top: 4rem;
  }
}
.gallery-element__close-button svg {
  width: 2.4rem;
  height: 2.4rem;
}
.gallery-element__close-button svg {
  fill: #fff;
}
.gallery-element__show-more-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  width: 100%;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.icon-teaser {
  padding-right: 0;
}
@media only screen and (min-width: 768px) {
  .icon-teaser {
    padding-right: 1rem;
  }
}
.icon-teaser__container {
  margin: 0 -0.5rem;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.image-icon-teaser {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
.image-icon-teaser__headlines {
  margin: 0;
}
.image-icon-teaser__icon-container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
}
@media only screen and (min-width: 768px) and (max-width: 1199px) {
  .image-icon-teaser__icon-container {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    -ms-flex-wrap: wrap;
        flex-wrap: wrap;
  }
  .image-icon-teaser__icon-container .icon-box {
    width: 50%;
  }
}
@media only screen and (min-width: 1200px) {
  .image-icon-teaser {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    -webkit-box-pack: start;
        -ms-flex-pack: start;
            justify-content: flex-start;
  }
  .image-icon-teaser .image {
    height: 100%;
  }
  .image-icon-teaser .image__image {
    width: auto;
  }
}
.image-icon-teaser__content {
  padding: 1.5rem 1rem;
}
@media only screen and (min-width: 1200px) {
  .image-icon-teaser__content {
    padding-left: 10%;
    padding-right: 1rem;
  }
}
.image-icon-teaser .icon-box {
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  margin: 1.6rem 0 1rem;
  padding: 0;
}
@media only screen and (min-width: 768px) and (max-width: 1199px) {
  .image-icon-teaser .icon-box:nth-child(odd) {
    padding-right: 1rem;
  }
  .image-icon-teaser .icon-box:nth-child(even) {
    padding-left: 1rem;
  }
}
.image-icon-teaser .icon-box__icon {
  -ms-flex-item-align: start;
      align-self: flex-start;
  font-size: 4rem;
  margin-right: 4rem;
  width: 4rem;
  height: 4rem;
  line-height: 4rem;
}
.image-icon-teaser--left {
  -webkit-box-orient: vertical;
  -webkit-box-direction: reverse;
      -ms-flex-direction: column-reverse;
          flex-direction: column-reverse;
}
@media only screen and (min-width: 1200px) {
  .image-icon-teaser--left {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: reverse;
        -ms-flex-direction: row-reverse;
            flex-direction: row-reverse;
  }
  .image-icon-teaser--left .image-icon-teaser__content {
    padding-left: 1rem;
    padding-right: 10%;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.image-map {
  position: relative;
  margin-top: 5.7333333333rem;
}
@media only screen and (min-width: 768px) {
  .image-map {
    padding: 0;
  }
}
.image-map__background-image {
  position: absolute;
  width: 100%;
  z-index: -1;
}
.image-map__container {
  height: 100%;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.image-slider__container--with-zoom .image__image {
  cursor: pointer;
}
.image-slider .image-element {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  padding: 0;
  margin: 0;
}
.image-slider .image-element .image__image {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -o-object-fit: cover;
     object-fit: cover;
}
.image-slider .icon-button__icon--bg-controls-overlay, .image-slider .icon-button__hover-icon--bg-controls-overlay {
  background-color: #ececec;
}
.image-slider__overlay .image {
  padding: 0 0 1.5rem;
}
.image-slider__overlay .image__image {
  -webkit-box-shadow: #1a171b 10px 10px 10px 0;
          box-shadow: #1a171b 10px 10px 10px 0;
}
.image-slider__overlay .zoom-overlay__close-button svg {
  fill: #fff;
}
.image-slider__overlay .icon-button__icon--bg-controls-overlay, .image-slider__overlay .icon-button__hover-icon--bg-controls-overlay {
  background-color: rgba(255, 255, 255, 0.6);
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.image-text-teaser-grid {
  width: 100%;
}
.image-text-teaser-grid__container--with-zoom .image__image {
  cursor: pointer;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-category-teaser__headline {
  margin-bottom: 1.6rem;
}
@media only screen and (min-width: 1024px) {
  .product-category-teaser__headline {
    text-align: center;
    margin-bottom: 2.7333333333rem;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-landing-page-explosion-graphic {
  position: relative;
  margin-top: 4rem;
}
.product-landing-page-explosion-graphic__container {
  display: grid;
  grid-template-areas: "part-1 description-1" "part-2 description-2" "part-3 description-3" "part-4 description-4" "part-5 description-5" "part-6 description-6" "part-7 description-7" "part-8 description-8";
  grid-template-columns: 100% 50%;
  -webkit-transition: all 1s ease-out;
  transition: all 1s ease-out;
}
@media only screen and (min-width: 768px) {
  .product-landing-page-explosion-graphic__container {
    grid-template-columns: 50% 50%;
    padding-bottom: 27rem;
  }
}
.product-landing-page-explosion-graphic__container.showDetails {
  -webkit-transform: translateX(-50%);
          transform: translateX(-50%);
}
.product-landing-page-explosion-graphic__container.showDetails .part-description {
  display: block;
}
@media only screen and (min-width: 768px) {
  .product-landing-page-explosion-graphic__container.showDetails {
    -webkit-transform: translateX(0);
            transform: translateX(0);
  }
}
@media only screen and (min-width: 768px) {
  .product-landing-page-explosion-graphic__headline {
    margin-left: 55%;
    margin-bottom: 2rem;
  }
}
.product-landing-page-explosion-graphic__headline .headline {
  font-size: 1.6666666667rem;
  text-transform: uppercase;
  color: #fff;
}
.product-landing-page-explosion-graphic__show-details-trigger {
  position: absolute;
  right: 0;
  top: 0;
  height: 3rem;
  width: 3rem;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  color: #1a171b;
  background: #fecc00;
  font-size: 2rem;
  border-radius: 100%;
  cursor: pointer;
}
@media only screen and (min-width: 768px) {
  .product-landing-page-explosion-graphic__show-details-trigger {
    display: none;
  }
}
.product-landing-page-explosion-graphic__part-image {
  -ms-flex-item-align: center;
      align-self: center;
  margin: 1rem 10%;
}
@media only screen and (min-width: 768px) {
  .product-landing-page-explosion-graphic__part-image {
    padding: 0 1rem;
    margin: 1rem 0;
  }
}
.product-landing-page-explosion-graphic__part-description {
  font-size: 0.9333333333rem;
  color: #fff;
}
@media only screen and (min-width: 768px) {
  .product-landing-page-explosion-graphic__part-description {
    background-color: #fff;
    color: #4b4b4d;
    color: #1a171b;
    padding-left: 1rem;
    padding-right: 2rem;
  }
  .product-landing-page-explosion-graphic__part-description svg {
    fill: #4b4b4d;
  }
}
.product-landing-page-explosion-graphic .part-description {
  padding: 1rem 0;
  position: relative;
  display: none;
}
@media only screen and (min-width: 768px) {
  .product-landing-page-explosion-graphic .part-description {
    display: block;
  }
  .product-landing-page-explosion-graphic .part-description::before {
    content: "";
    position: absolute;
    width: 50%;
    background-color: #fecc00;
    height: 0.1333333333rem;
    top: 50%;
    margin-left: -53%;
    left: 0;
  }
  .product-landing-page-explosion-graphic .part-description::after {
    content: "";
    position: absolute;
    height: 0.8rem;
    width: 0.8rem;
    border-radius: 100%;
    background-color: #fecc00;
    top: 50%;
    margin-left: -53%;
    -webkit-transform: translate(-0.3333333333rem, -0.3333333333rem);
            transform: translate(-0.3333333333rem, -0.3333333333rem);
    left: 0;
  }
}
.product-landing-page-explosion-graphic__part-1-image {
  grid-area: part-1;
}
.product-landing-page-explosion-graphic__part-1-description {
  grid-area: description-1;
}
.product-landing-page-explosion-graphic__part-2-image {
  grid-area: part-2;
}
.product-landing-page-explosion-graphic__part-2-description {
  grid-area: description-2;
}
.product-landing-page-explosion-graphic__part-3-image {
  grid-area: part-3;
}
.product-landing-page-explosion-graphic__part-3-description {
  grid-area: description-3;
}
.product-landing-page-explosion-graphic__part-4-image {
  grid-area: part-4;
}
.product-landing-page-explosion-graphic__part-4-description {
  grid-area: description-4;
}
.product-landing-page-explosion-graphic__part-5-image {
  grid-area: part-5;
}
.product-landing-page-explosion-graphic__part-5-description {
  grid-area: description-5;
}
.product-landing-page-explosion-graphic__part-6-image {
  grid-area: part-6;
}
.product-landing-page-explosion-graphic__part-6-description {
  grid-area: description-6;
}
.product-landing-page-explosion-graphic__part-7-image {
  grid-area: part-7;
}
.product-landing-page-explosion-graphic__part-7-description {
  grid-area: description-7;
}
.product-landing-page-explosion-graphic__part-8-image {
  grid-area: part-8;
}
.product-landing-page-explosion-graphic__part-8-description {
  grid-area: description-8;
}
.product-landing-page-explosion-graphic__part-1-description {
  border-top-right-radius: 6.6666666667rem;
  padding-top: 2rem;
}
.product-landing-page-explosion-graphic__cta-container {
  border-top-right-radius: 6.6666666667rem;
  padding: 3rem 2rem 2rem;
  margin: 0 2rem;
  background-color: #fff;
  color: #4b4b4d;
}
.product-landing-page-explosion-graphic__cta-container svg {
  fill: #4b4b4d;
}
@media only screen and (min-width: 768px) {
  .product-landing-page-explosion-graphic__cta-container {
    border-radius: 0;
    position: absolute;
    bottom: 0;
    width: 50%;
    margin-left: 50%;
    padding: 1rem;
  }
}
.product-landing-page-explosion-graphic__cta-container .button {
  width: 100%;
  margin-bottom: 1rem;
}
@media only screen and (min-width: 768px) {
  .product-landing-page-explosion-graphic__cta-description {
    font-size: 0.9333333333rem;
    position: relative;
  }
  .product-landing-page-explosion-graphic__cta-description::before {
    content: "";
    height: 20rem;
    position: absolute;
    margin-top: -20rem;
    top: 0;
    left: -1rem;
    right: -1rem;
    z-index: -1;
    background-color: #fff;
    color: #4b4b4d;
  }
  .product-landing-page-explosion-graphic__cta-description::before svg {
    fill: #4b4b4d;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-landing-page-explosion-graphics {
  position: relative;
  z-index: 10;
}
.product-landing-page-explosion-graphics::before {
  content: "";
  width: 200vw;
  height: 95%;
  background-image: linear-gradient(150deg, #4b4b4d, #1a171b);
  /* stylelint-disable-next-line declaration-block-no-duplicate-properties */
  background-image: url("/assets/images/grain_pattern.png"), linear-gradient(150deg, #4b4b4d, #1a171b);
  position: absolute;
  z-index: -1;
  left: -50vw;
  top: 0;
  -webkit-transform: rotate(5deg);
          transform: rotate(5deg);
}
.product-landing-page-explosion-graphics__headline {
  margin-top: 3rem;
  padding-top: 2rem;
}
@media only screen and (min-width: 768px) {
  .product-landing-page-explosion-graphics__headline {
    width: 50%;
  }
}
.product-landing-page-explosion-graphics__headline .headline {
  text-transform: uppercase;
  color: #fff;
}
.product-landing-page-explosion-graphics__container {
  display: grid;
  grid-template-areas: "graphic-1" "graphic-2";
  grid-template-columns: 1fr;
}
@media only screen and (min-width: 768px) {
  .product-landing-page-explosion-graphics__container {
    margin-top: 2rem;
    margin-bottom: 4rem;
    grid-template-areas: "graphic-1 graphic-2";
    grid-template-columns: repeat(2, 1fr);
    grid-gap: 1rem;
  }
}
.product-landing-page-explosion-graphics__container .graphic-1 {
  grid-area: graphic-1;
}
.product-landing-page-explosion-graphics__container .graphic-2 {
  grid-area: graphic-2;
}
.product-landing-page-explosion-graphics__container .graphic-3 {
  grid-area: graphic-3;
}
.product-landing-page-explosion-graphics__container .graphic-4 {
  grid-area: graphic-4;
}
.product-landing-page-explosion-graphics__container .graphic-5 {
  grid-area: graphic-5;
}
.product-landing-page-explosion-graphics__container .graphic-6 {
  grid-area: graphic-6;
}
.product-landing-page-explosion-graphics__container .graphic-7 {
  grid-area: graphic-7;
}
.product-landing-page-explosion-graphics__container .graphic-8 {
  grid-area: graphic-8;
}
.product-landing-page-explosion-graphics .product-landing-page-explosion-graphic__part-image {
  opacity: 0;
  -webkit-transition: all 1s ease-out;
  transition: all 1s ease-out;
  margin-top: -10rem;
}
.product-landing-page-explosion-graphics .product-landing-page-explosion-graphic__part-description .part-description {
  opacity: 0;
  -webkit-transition: all 2s ease-in;
  transition: all 2s ease-in;
}
.product-landing-page-explosion-graphics.loaded .product-landing-page-explosion-graphic__part-image {
  opacity: 1;
  margin-top: 1rem;
}
.product-landing-page-explosion-graphics.loaded .product-landing-page-explosion-graphic__part-description {
  /* stylelint-disable-next-line max-nesting-depth */
}
.product-landing-page-explosion-graphics.loaded .product-landing-page-explosion-graphic__part-description .part-description {
  opacity: 1;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.product-landing-page-use-cases {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
      flex-wrap: wrap;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: justify;
      -ms-flex-pack: justify;
          justify-content: space-between;
  flex-wrap: wrap;
  margin: 4rem 0;
}
@media only screen and (min-width: 550px) {
  .product-landing-page-use-cases {
    margin: 4rem -0.25rem;
  }
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.service-sidebars {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  position: fixed;
  top: 33%;
  z-index: 700;
  -webkit-transition: all 1s ease-in-out;
  transition: all 1s ease-in-out;
  right: -0.8rem;
}
@media only screen and (min-width: 550px) {
  .service-sidebars {
    top: 25%;
    right: -22.5333333333rem;
  }
}
@media only screen and (min-width: 550px) {
  .service-sidebars.show {
    right: -0.8rem;
  }
}
.service-sidebars.show .service-sidebars__marker {
  cursor: default;
}
@media only screen and (min-width: 550px) {
  .service-sidebars.show .service-sidebars__marker {
    margin-right: -1.3333333333rem;
  }
}
.service-sidebars.show .service-sidebars__marker-label {
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 550px) {
  .service-sidebars.show .service-sidebars__marker-label {
    display: none;
  }
}
.service-sidebars.show .service-sidebars__marker:hover .service-sidebars__marker-label, .service-sidebars.show .service-sidebars__marker:active .service-sidebars__marker-label {
  display: none;
}
@media only screen and (min-width: 550px) {
  .service-sidebars.show .service-sidebars__sidebar-content {
    left: -0.4666666667rem;
  }
}
@media only screen and (min-width: 550px) {
  .service-sidebars.show .service-sidebars__text {
    visibility: visible;
    left: -1.3333333333rem;
  }
}
.service-sidebars__text {
  display: none;
}
@media only screen and (min-width: 550px) {
  .service-sidebars__text {
    display: block;
    visibility: hidden;
    position: relative;
    padding: 0 0.8666666667rem;
    min-width: 22rem;
    max-width: 22rem;
  }
  .service-sidebars__text .headline {
    text-shadow: -1px 0 0 #fff, 1px 2px 0 rgba(0, 0, 0, 0.2), 1px 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 #fff;
  }
}
.service-sidebars__container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  position: relative;
}
.service-sidebars__container--show-label .service-sidebars__marker-label {
  display: inline-block;
}
.service-sidebars__sidebar {
  display: none;
}
@media only screen and (min-width: 550px) {
  .service-sidebars__sidebar {
    display: block;
  }
}
@media only screen and (min-width: 550px) {
  .service-sidebars__sidebar-content {
    background-color: #fff;
    color: #4b4b4d;
    border-bottom-left-radius: 35px;
    border-top-width: 1px;
    border-bottom-width: 1px;
    border-left-width: 1px;
    border-style: solid;
    border-color: #d0d0d0;
    min-width: 22rem;
    max-width: 22rem;
    top: 0.8rem;
    z-index: 10;
    position: relative;
  }
  .service-sidebars__sidebar-content svg {
    fill: #4b4b4d;
  }
}
.service-sidebars__close-button {
  display: none;
}
@media only screen and (min-width: 550px) {
  .service-sidebars__close-button {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
    -webkit-box-align: center;
        -ms-flex-align: center;
            align-items: center;
    width: 2rem;
    height: 2rem;
    font-size: 1.3333333333rem;
    cursor: pointer;
    margin-left: auto;
    padding-right: 0.5rem;
    padding-top: 0.5rem;
    position: absolute;
    right: 0.25rem;
    z-index: 1;
  }
  .service-sidebars__close-button svg {
    width: 1.3333333333rem;
    height: 1.3333333333rem;
  }
}
.service-sidebars__marker {
  cursor: pointer;
  margin-right: -0.3333333333rem;
}
.service-sidebars__marker-icon {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 5.3333333333rem;
  height: 7.3333333333rem;
}
.service-sidebars__marker-icon svg {
  fill: #fecc00;
  width: 6.6666666667rem;
  height: 6.6666666667rem;
  min-width: unset;
}
.service-sidebars__marker-label {
  display: inline-block;
  position: absolute;
  top: 0.4rem;
  left: 0.8666666667rem;
  text-transform: uppercase;
  -webkit-transform: rotate(-90deg);
          transform: rotate(-90deg);
  width: 100%;
  line-height: 1.4;
  font-weight: 700;
}
@media only screen and (min-width: 550px) {
  .service-sidebars__marker-label {
    top: -10.7333333333rem;
    left: -9.9333333333rem;
  }
}
.service-sidebars__marker-text {
  background-color: rgba(236, 236, 236, 0.85);
  color: #4b4b4d;
  border-top-right-radius: 10px;
  display: inline-block;
  padding: 0 0.5rem 0;
  line-height: 1.6;
}
.service-sidebars__marker-text svg {
  fill: #4b4b4d;
}
@media only screen and (min-width: 550px) {
  .service-sidebars__marker-text {
    line-height: 1.9;
  }
}
.service-sidebars__marker:hover .service-sidebars__marker-label, .service-sidebars__marker:active .service-sidebars__marker-label {
  display: inline-block;
}

.is-locked .service-sidebars {
  display: none;
}
@charset "UTF-8";
/**
 * Defines the main color of the shop theme. Usage: primary elements' background and color.
 */
/**
 * Defines alternative color of the shop theme. Usage: secondary elements' background and color.
 */
/**
 * Defines white color. Usage: not transparent elements' background of default background.
 */
/**
 * Defines a light shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines a lighter shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the lightest shade color. Usage: elements' background, borders and text.
 */
/**
 * Defines the shade of the black color. Usage: as a base of black color for semi-transparent elements.
 */
/**
 * Defines a dark shade color. Usage: elements' text color variant.
 */
/**
 * Defines a darker shade color. Usage: elements' text color variant.
 */
/**
 * Defines the darkest shade color. Usage: elements' text color variant.
 */
/**
 * Defines a transparent color. Usage: elements' background, border.
 */
/**
 * Defines the main background color. Usage: body and side-drawer background.
 */
/**
 * Defines the main color of text. Usage: default global text color.
 */
/**
 * Defines a default global border color for the input elements.
 */
/**
 * Defines a default global border color for the input elements on focus event.
 */
/**
 * Defines a shadow shade and transparency for the shadowed elements.
 */
/**
 * Defines a default overlay color. Usage: elements with overlay - side-drawer, popups etc.
 */
/**
 * Defines a default image overlay color. Usage: images with overlay - lazy-image.
 */
/**
 * Defines action colors map.
 */
/**
 * Defines font family setting. Usage: body global font styles.
 */
/**
 * Defines font family setting for code. Can be used for code and pre elements.
 */
/**
 * Defines basic font size. Usage: global basic font size.
 */
/**
 * Font size values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Font weight values map. Usage: mixin to set font weight property.
 */
/**
 * Font line height values map. Usage: mixins providing styles for headings, text elements etc.
 */
/**
 * Defines a default duration value for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines a default timing function for the animation effects. Usage: mixins providing animation properties.
 */
/**
 * Defines default z-index value.
 */
/**
 * Defines z-index value for the floating elements.
 */
/**
 * Defines z-index value for the notification area context.
 */
/**
 * Defines z-index value for the side drawer context.
 */
/**
 * Defines z-index value for the header context.
 */
/**
 * Defines z-index value for the search suggestions context.
 */
/**
 * Defines z-index value for the ajax loader.
 */
/**
 * Defines z-index value for the top navigation context.
 */
/**
 * Defines spacing values map. Usage: spacing helpers and mixins.
 */
/**
 * Defines breakpoints' values for responsive.
 */
/**
 * Defines grid system columns count.
 */
/**
 * Defines grid container max width.
 */
/**
 * Defines gutters' size for grid "with-gutter" modifier.
 */
/**
 * Defines import blacklist. Usage: import helper.
 */
/**
 * Provides list of properies for reset usage.
 */
/**
 * Wrapper function for the darken sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Wrapper function for the lighten sass function with a default degree parameter.
 * @param {Color} $setting-color
 * @param {Number} $degree [10]
 */
/**
 * Sets font-size property from font size settings map - $setting-font-size according to the passed map key.
 * @param {String | Number} $size
 */
/**
 * Sets font-weight property from font weight settings map - $setting-font-weight according to the passed map key.
 * @param {String} $weight
 */
/**
 * Sets line-height property from line-height settings map - $setting-font-line-height according to the passed map key.
 * @param {String | Number} $height
 */
/**
 * Povides transition property configured by the passed parameters.
 * @param {String} $props
 * @param {Number} $duration [$setting-effect-default-duration]
 * @param {String} $ease [$setting-effect-default-ease]
 */
/**
 * Forces element visibility.
 */
/**
 * Forces element invisibility.
 */
/**
 * Provides global class names with spacing properties set from $setting-spacing map.
 * @param {String} $name Main selector name.
 * @param {List} $sides [[]] List of sides to set properties.
 */
/**
 * Returns 0 or the first value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Returns null or the last value from the $edges list.
 * @param {List} $edges [$setting-breakpoints] List length must be less than or equal to 2.
 * @return {Base}
 */
/**
 * Sets screen media query with min-width set to $min parameter.
 * @param $min {Number} [0]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed as parameters.
 * @param {Number} $min [0]
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with max-width set to $max parameter.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Sets screen media query with breakpoints range passed to parameters or
 * with min-width query if only one parameter is passed.
 * @param {Number} $max [$setting-grid-max-width]
 * @content Extends mixin with properties for media query.
 */
/**
 * Returns column ratio in relation to columns count.
 * @param {Number} $column
 * @param {Number} $columns [$setting-grid-columns]
 * @return {Number}
 */
/**
 * Adds clearing for element with floated child elements.
 */
/**
 * Adds a box-shadow with basic values.
 */
/**
 * Checks parameter on presence in the blacklist of imports setting list.
 * @param {List} $keywords
 * @content Extends mixin with properties if $keywords is not on the blacklist.
 */
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
    https://github.com/justinskolnick/unitize
    Copyright © 2012-2013 Justin Skolnick

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* stylelint-disable max-nesting-depth */
/* stylelint-enable max-nesting-depth */
/* stylelint-disable media-query-list-comma-newline-after,media-query-list-comma-space-after */
/* stylelint-disable declaration-no-important */
/**
 * Defines z-index value for the side drawer context.
 */
.summary-overview__grand-total-price {
  font-size: 1.1rem;
  line-height: 1.4;
}

/**
 * @deprecated Use company-user-agent-widget-company-user-list mixin instead.
 */
/**
 * @deprecated Use company-page-business-unit-chart-item mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price mixin instead.
 */
/**
 * @deprecated Use price-product-volume-widget-volume-price-table mixin instead.
 */
/**
 * @deprecated Use product-packaging-unit-widget-packaging-unit-cart mixin instead.
 */
/**
 * @deprecated Use product-search-widget-product-quick-add-form mixin instead.
 */
.collapsible-list__button {
  background-color: rgba(255, 255, 255, 0);
  color: #fecc00;
  cursor: pointer;
}
.collapsible-list__button:hover {
  text-decoration: underline;
}
.collapsible-list__button::after {
  content: attr(data-show);
}
.collapsible-list__button--shown::after {
  content: attr(data-hide);
}
.collapsible-list__button-content {
  display: none;
}

/* fe-sniffer:disabled correct-scss-component-structure */
/**
 * @deprecated Use shop-ui-quote-status-color mixin instead.
 */
/**
 * @deprecated Use tabs-widget-search-tabs mixin instead.
 */
.tabs-element {
  position: relative;
}
.tabs-element__nav {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: horizontal;
  -webkit-box-direction: normal;
      -ms-flex-direction: row;
          flex-direction: row;
  -webkit-box-pack: start;
      -ms-flex-pack: start;
          justify-content: flex-start;
  -ms-flex-wrap: nowrap;
      flex-wrap: nowrap;
  white-space: nowrap;
  overflow-y: hidden;
  overflow-x: auto;
}
.tabs-element__nav-item {
  border-top-left-radius: 10px;
  border-top-right-radius: 10px;
  position: relative;
  font-size: 1.2rem;
  font-weight: 700;
  padding: 1.3333333333rem;
  text-align: center;
  cursor: pointer;
  width: -webkit-fit-content;
  width: -moz-fit-content;
  width: fit-content;
  opacity: 0.5;
}
@media only screen and (min-width: 1024px) {
  .tabs-element__nav-item {
    opacity: 1;
  }
}
.tabs-element__nav-item .tabs-element__link {
  color: #4b4b4d;
  /* stylelint-disable-next-line max-nesting-depth */
}
.tabs-element__nav-item .tabs-element__link:hover {
  color: #4b4b4d;
}
.tabs-element__nav-item.active {
  opacity: 1;
  /* stylelint-disable-next-line max-nesting-depth */
}
@media only screen and (min-width: 1024px) {
  .tabs-element__nav-item.active {
    background-color: #ececec;
    color: #4b4b4d;
  }
  .tabs-element__nav-item.active svg {
    fill: #4b4b4d;
  }
}
.tabs-element__content {
  background-color: #ececec;
  color: #4b4b4d;
  display: none;
  min-height: 0;
  position: relative;
  width: 100%;
  padding: 1.6rem;
}
.tabs-element__content svg {
  fill: #4b4b4d;
}
.tabs-element__content > .tabs-element__content-body {
  display: none;
}
.tabs-element__content.active {
  display: block;
}

/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvc3R5bGVzL2Jhc2ljLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vdmVuZG9yL3NwcnlrZXItc2hvcC9jYXRhbG9nLXBhZ2Uvc3JjL1NwcnlrZXJTaG9wL1l2ZXMvQ2F0YWxvZ1BhZ2UvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9zb3J0L3N0eWxlLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL0NhdGFsb2dQYWdlL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvc3VnZ2VzdGlvbi1wcm9kdWN0L3N1Z2dlc3Rpb24tcHJvZHVjdC5zY3NzIiwid2VicGFjazovLy8uL3ZlbmRvci9zcHJ5a2VyLXNob3AvcHJvZHVjdC1kZXRhaWwtcGFnZS9zcmMvU3ByeWtlclNob3AvWXZlcy9Qcm9kdWN0RGV0YWlsUGFnZS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3Byb2R1Y3QtY2Fyb3VzZWwvc3R5bGUuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvUHl6L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9hdG9tcy9iYWRnZS9iYWRnZS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9QeXovWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL2F0b21zL2JveC9ib3guc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9hdG9tcy9idXR0b24vYnV0dG9uLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvYXRvbXMvY2hlY2tib3gvY2hlY2tib3guc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9hdG9tcy9pY29uL2ljb24uc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9hdG9tcy9pbnB1dC9pbnB1dC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL2F0b21zL2xhYmVsL2xhYmVsLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvYXRvbXMvbGluay9saW5rLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvYXRvbXMvbGlzdC9saXN0LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvYXRvbXMvcmFkaW8vcmFkaW8uc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9hdG9tcy9zZWxlY3Qvc2VsZWN0LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvYXRvbXMvdGFibGUvdGFibGUuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9hdG9tcy90ZXh0YXJlYS90ZXh0YXJlYS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL2F0b21zL3RodW1ibmFpbC90aHVtYm5haWwuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9hdG9tcy90aXRsZS90aXRsZS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9hY3Rpb24tYmFyL2FjdGlvbi1iYXIuc2NzcyIsIndlYnBhY2s6Ly8vLi92ZW5kb3Ivc3ByeWtlci1zaG9wL3Nob3AtdWkvc3JjL1NwcnlrZXJTaG9wL1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvYWpheC1hZGQtdG8tY2FydC9zdHlsZS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9hamF4LWxvYWRlci9hamF4LWxvYWRlci5zY3NzIiwid2VicGFjazovLy8uL3ZlbmRvci9zcHJ5a2VyLXNob3Avc2hvcC11aS9zcmMvU3ByeWtlclNob3AvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9hbGVydC9zdHlsZS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9hdXRvY29tcGxldGUtZm9ybS9hdXRvY29tcGxldGUtZm9ybS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9icmVhZGNydW1iLXN0ZXAvYnJlYWRjcnVtYi1zdGVwLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL1B5ei9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2NhcmQvY2FyZC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9QeXovWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9jYXJ0LWNvdW50ZXIvY2FydC1jb3VudGVyLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2NhcnQtaXRlbXMtY291bnRlci9jYXJ0LWl0ZW1zLWNvdW50ZXIuc2NzcyIsIndlYnBhY2s6Ly8vLi92ZW5kb3Ivc3ByeWtlci1zaG9wL3Nob3AtdWkvc3JjL1NwcnlrZXJTaG9wL1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvY29sbGFwc2libGUtbGlzdC9zdHlsZXMuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvZmxhc2gtbWVzc2FnZS9mbGFzaC1tZXNzYWdlLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2Zvcm0vZm9ybS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9QeXovWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9qdW1ib3Ryb24vanVtYm90cm9uLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL1B5ei9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2xhenktaW1hZ2UvbGF6eS1pbWFnZS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9tZW51L21lbnUuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvUHl6L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvbW9uZXktcHJpY2UvbW9uZXktcHJpY2Uuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvbmF2aWdhdGlvbi1pY29uLWxpc3QvbmF2aWdhdGlvbi1pY29uLWxpc3Quc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvbmF2aWdhdGlvbi1tdWx0aWxldmVsL25hdmlnYXRpb24tbXVsdGlsZXZlbC5zY3NzIiwid2VicGFjazovLy8uL3ZlbmRvci9zcHJ5a2VyLXNob3Avc2hvcC11aS9zcmMvU3ByeWtlclNob3AvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9uYXZpZ2F0aW9uLW11bHRpdmlldy1saXN0L3N0eWxlLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5zY3NzIiwid2VicGFjazovLy8uL3ZlbmRvci9zcHJ5a2VyLXNob3Avc2hvcC11aS9zcmMvU3ByeWtlclNob3AvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvci9zdHlsZS5zY3NzIiwid2VicGFjazovLy8uL3ZlbmRvci9zcHJ5a2VyLXNob3Avc2hvcC11aS9zcmMvU3ByeWtlclNob3AvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9wYXNzd29yZC1maWVsZC9zdHlsZS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9wcmljZS9wcmljZS5zY3NzIiwid2VicGFjazovLy8uL3ZlbmRvci9zcHJ5a2VyLXNob3Avc2hvcC11aS9zcmMvU3ByeWtlclNob3AvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9wcm9kdWN0LWNhcmQvc3R5bGUuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvcHJvZHVjdC1pdGVtL3Byb2R1Y3QtaXRlbS5zY3NzIiwid2VicGFjazovLy8uL3ZlbmRvci9zcHJ5a2VyLXNob3Avc2hvcC11aS9zcmMvU3ByeWtlclNob3AvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9wcm9kdWN0LWl0ZW0tbGlzdC9zdHlsZS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9wcm9kdWN0LWxpc3QtaXRlbS9wcm9kdWN0LWxpc3QtaXRlbS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9QeXovWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9xdW90ZS1zdGF0dXMvcXVvdGUtc3RhdHVzLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3NlYXJjaC1mb3JtL3NlYXJjaC1mb3JtLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vdmVuZG9yL3NwcnlrZXItc2hvcC9zaG9wLXVpL3NyYy9TcHJ5a2VyU2hvcC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3NpbXBsZS1jYXJvdXNlbC9zdHlsZS5zY3NzIiwid2VicGFjazovLy8uL3ZlbmRvci9zcHJ5a2VyLXNob3Avc2hvcC11aS9zcmMvU3ByeWtlclNob3AvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9zaW5nbGUtYnV0dG9uLWZvcm0vc3R5bGUuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvUHl6L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvc3RhdHVzL3N0YXR1cy5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9zdWdnZXN0LXNlYXJjaC9zdWdnZXN0LXNlYXJjaC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy90b2dnbGVyLWNoZWNrYm94L3RvZ2dsZXItY2hlY2tib3guc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvdG9nZ2xlci1yYWRpby90b2dnbGVyLXJhZGlvLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vdmVuZG9yL3NwcnlrZXItc2hvcC9zaG9wLXVpL3NyYy9TcHJ5a2VyU2hvcC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3Rvb2x0aXAtbWVzc2FnZS9zdHlsZS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL29yZ2FuaXNtcy9oZWFkZXIvaGVhZGVyLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL25hdmlnYXRpb24tdG9wL25hdmlnYXRpb24tdG9wLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vdmVuZG9yL3NwcnlrZXItc2hvcC9zaG9wLXVpL3NyYy9TcHJ5a2VyU2hvcC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL25vdGlmaWNhdGlvbi1hcmVhL3N0eWxlLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL3NlY3Rpb24vc2VjdGlvbi5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL29yZ2FuaXNtcy9zaWRlLWRyYXdlci9zaWRlLWRyYXdlci5zY3NzIiwid2VicGFjazovLy8uL3NyYy9QeXovWXZlcy9Qcm9kdWN0RGV0YWlsUGFnZS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3Byb2R1Y3QtYnVuZGxlL3Byb2R1Y3QtYnVuZGxlLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL1B5ei9ZdmVzL1Byb2R1Y3REZXRhaWxQYWdlL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvcHJvZHVjdC1idW5kbGUtZGV0YWlsL3Byb2R1Y3QtYnVuZGxlLWRldGFpbC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9QeXovWXZlcy9Qcm9kdWN0RGV0YWlsUGFnZS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3Byb2R1Y3QtY21zL3Byb2R1Y3QtY21zLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Byb2R1Y3REZXRhaWxQYWdlL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvcHJvZHVjdC1jb25maWd1cmF0b3IvcHJvZHVjdC1jb25maWd1cmF0b3Iuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvUHJvZHVjdERldGFpbFBhZ2UvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9wcm9kdWN0LWRldGFpbC9wcm9kdWN0LWRldGFpbC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9Qcm9kdWN0RGV0YWlsUGFnZS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3ZhcmlhbnQvdmFyaWFudC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9QeXovWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL2F0b21zL3F1YW50aXR5LW9wdGlvbi9xdWFudGl0eS1vcHRpb24uc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvUHl6L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9hdG9tcy9zd2l0Y2gvc3dpdGNoLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL1B5ei9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2NvbnRlbnQtY29sbGFwc2VyL2NvbnRlbnQtY29sbGFwc2VyLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL1B5ei9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2NvcHlyaWdodC1idWlsZC13aXRoL2NvcHlyaWdodC1idWlsZC13aXRoLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2N1c3RvbS1zZWxlY3QvY3VzdG9tLXNlbGVjdC5zY3NzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9qcXVlcnktZGF0ZXRpbWVwaWNrZXIvYnVpbGQvanF1ZXJ5LmRhdGV0aW1lcGlja2VyLm1pbi5jc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL1B5ei9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9pY29uLXRvb2x0aXAvaWNvbi10b29sdGlwLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL25hdmlnYXRpb24tZm9vdGVyLWl0ZW0vbmF2aWdhdGlvbi1mb290ZXItaXRlbS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9uYXZpZ2F0aW9uLXNpZGViYXIvbmF2aWdhdGlvbi1zaWRlYmFyLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL25hdmlnYXRpb24tc2lkZWJhci1pdGVtL25hdmlnYXRpb24tc2lkZWJhci1pdGVtLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL1B5ei9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL25vZGUtYW5pbWF0b3Ivbm9kZS1hbmltYXRvci5zY3NzIiwid2VicGFjazovLy8uL3NyYy9QeXovWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9wcmljZS1tb2RlL3ByaWNlLW1vZGUuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvUHl6L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvcHJvZHVjdC1jYXJkLWl0ZW0vcHJvZHVjdC1jYXJkLWl0ZW0uc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvUHl6L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvcHJvZHVjdC1pdGVtLXZhcmlhbnQtc2VsZWN0b3IvcHJvZHVjdC1pdGVtLXZhcmlhbnQtc2VsZWN0b3Iuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvdGFibGUtYWN0aW9uLWxpbmsvdGFibGUtYWN0aW9uLWxpbmsuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvUHl6L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvdGFibGUtYWN0aW9uLXNwYW4vdGFibGUtYWN0aW9uLXNwYW4uc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvdG9nZ2xlci1hY2NvcmRpb24vdG9nZ2xlci1hY2NvcmRpb24uc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvQ2F0YWxvZ1BhZ2UvVGhlbWUvZGVmYXVsdC92aWV3cy9zZWFyY2gvc2VhcmNoLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L3RlbXBsYXRlcy9wYWdlLWxheW91dC1tYWluL3BhZ2UtbGF5b3V0LW1haW4uc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvQ2F0YWxvZ1BhZ2UvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9hY3RpdmUtZmlsdGVyL2FjdGl2ZS1maWx0ZXIuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvQ2F0YWxvZ1BhZ2UvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9hamF4LXByb2R1Y3QtbGlzdC9hamF4LXByb2R1Y3QtbGlzdC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9DYXRhbG9nUGFnZS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2NhdGFsb2ctY21zLWJsb2NrL2NhdGFsb2ctY21zLWJsb2NrLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL0NhdGFsb2dQYWdlL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvZmlsdGVyLWNhdGVnb3J5L2ZpbHRlci1jYXRlZ29yeS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9DYXRhbG9nUGFnZS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2ZpbHRlci1lbnVtZXJhdGlvbi9maWx0ZXItZW51bWVyYXRpb24uc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvQ2F0YWxvZ1BhZ2UvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9maWx0ZXItcmFuZ2UvZmlsdGVyLXJhbmdlLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL0NhdGFsb2dQYWdlL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvZmlsdGVyLXJhdGluZy9maWx0ZXItcmF0aW5nLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL0NhdGFsb2dQYWdlL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvb3V0bGV0LWZpbHRlci1idXR0b25zL291dGxldC1maWx0ZXItYnV0dG9ucy5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9DYXRhbG9nUGFnZS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3NvcnQtbGlzdC9zb3J0LWxpc3Quc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvQ2F0YWxvZ1BhZ2UvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9zdWdnZXN0aW9uLWxpbmtzLWxpc3Qvc3VnZ2VzdGlvbi1saW5rcy1saXN0LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL0NhdGFsb2dQYWdlL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvdmlldy1tb2RlLXN3aXRjaC92aWV3LW1vZGUtc3dpdGNoLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL0NhdGFsb2dQYWdlL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9vcmdhbmlzbXMvYWN0aXZlLWZpbHRlci1zZWN0aW9uL2FjdGl2ZS1maWx0ZXItc2VjdGlvbi5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9DYXRhbG9nUGFnZS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL2ZpbHRlci1zZWN0aW9uL2ZpbHRlci1zZWN0aW9uLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Byb2R1Y3REZXRhaWxQYWdlL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvY29tcGF0aWJsZS1kaW1tZXIvY29tcGF0aWJsZS1kaW1tZXIuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvUHJvZHVjdERldGFpbFBhZ2UvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9kb3dubG9hZC1kcm9wZG93bi9kb3dubG9hZC1kcm9wZG93bi5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9Qcm9kdWN0RGV0YWlsUGFnZS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2Rvd25sb2FkLWl0ZW0vZG93bmxvYWQtaXRlbS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9Qcm9kdWN0RGV0YWlsUGFnZS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3RlY2huaWNhbC1pY29ucy90ZWNobmljYWwtaWNvbnMuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvUHJvZHVjdERldGFpbFBhZ2UvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy92YXJpYW50LWNvbmZpZ3VyYXRvci92YXJpYW50LWNvbmZpZ3VyYXRvci5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL2F0b21zL2F2YWlsYWJpbGl0eS9hdmFpbGFiaWxpdHkuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9hdG9tcy9iYWNrZ3JvdW5kL2JhY2tncm91bmQuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9hdG9tcy9ib3JkZXIvYm9yZGVyLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvYXRvbXMvaGVhZGxpbmUvaGVhZGxpbmUuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9hdG9tcy9saW5lL2xpbmUuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9hdG9tcy9tYXJrZG93bi9tYXJrZG93bi5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL2F0b21zL292ZXJsYXktYmxvY2svb3ZlcmxheS1ibG9jay5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL2F0b21zL3N0b3J5Ymxvay1zdHViL3N0b3J5Ymxvay1zdHViLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvYXRvbXMvc3ZnLWljb24vc3ZnLWljb24uc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9hdG9tcy90ZXh0L3RleHQuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9vcmdhbmlzbXMvYWJzdHJhY3QtdGFicy1lbGVtZW50L2Fic3RyYWN0LXRhYnMtZWxlbWVudC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL29yZ2FuaXNtcy9hY2NvdW50LW5hdmlnYXRpb24vYWNjb3VudC1uYXZpZ2F0aW9uLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL2J1eS1ib3gvYnV5LWJveC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL29yZ2FuaXNtcy9jb29raWViYXIvY29va2llYmFyLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL2Zhc3RjYWxjL2Zhc3RjYWxjLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL2ZpbHRlci1zZWxlY3Rpb24tbW9kYWwvZmlsdGVyLXNlbGVjdGlvbi1tb2RhbC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL29yZ2FuaXNtcy9maW5kLWRlYWxlci9maW5kLWRlYWxlci5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL29yZ2FuaXNtcy9mb290ZXIvZm9vdGVyLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL2luc3BpcmF0aW9uX3RvcGljL2luc3BpcmF0aW9uX3RvcGljLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL2ludGVybmF0aW9uYWxpemF0aW9uL2ludGVybmF0aW9uYWxpemF0aW9uLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL25hdmlnYXRpb24tbGlzdC1tb2JpbGUvbmF2aWdhdGlvbi1saXN0LW1vYmlsZS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL29yZ2FuaXNtcy9vcmRlci1zYW1wbGVzL29yZGVyLXNhbXBsZXMuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9vcmdhbmlzbXMvb3JkZXItc2lkZWJhci9vcmRlci1zaWRlYmFyLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL3BkcC1udW1pbm9zLWNvbmZpZ3VyYXRvci9wZHAtbnVtaW5vcy1jb25maWd1cmF0b3Iuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9vcmdhbmlzbXMvcHJvZHVjdC1saXN0aW5nLW1vZGFsLXdpbmRvdy9wcm9kdWN0LWxpc3RpbmctbW9kYWwtd2luZG93LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL3JlZHVjZWQtdG9wLWhlYWRlci9yZWR1Y2VkLXRvcC1oZWFkZXIuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvYWN0aW9uLWNhcmQvYWN0aW9uLWNhcmQuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvYWN0aW9uLWNhcmQtZ3JpZC9hY3Rpb24tY2FyZC1ncmlkLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2FqYXgtbW9kYWwtd2luZG93L2FqYXgtbW9kYWwtd2luZG93LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2JhY2stcm93LWJ1dHRvbi9iYWNrLXJvdy1idXR0b24uc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvYmFubmVyL2Jhbm5lci5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9icmVhZGNydW1iL2JyZWFkY3J1bWIuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvY29udGFjdC1sb2NrLW1vZGFsLXdpbmRvdy9jb250YWN0LWxvY2stbW9kYWwtd2luZG93LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2NvdW50cnktbGlzdC9jb3VudHJ5LWxpc3Quc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvY291bnRyeS1zZWxlY3Rpb24vY291bnRyeS1zZWxlY3Rpb24uc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvZG93bmxvYWRzL2Rvd25sb2Fkcy5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9lZGl0YWJsZS10ZXh0YXJlYS9lZGl0YWJsZS10ZXh0YXJlYS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9lbmVyZ3ktbGFiZWwvZW5lcmd5LWxhYmVsLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2VuZXJneS1sYWJlbC1pbWFnZS1zbGlkZXIvZW5lcmd5LWxhYmVsLWltYWdlLXNsaWRlci5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9maWx0ZXItY2F0ZWdvcnktYWNjb3JkaW9uL2ZpbHRlci1jYXRlZ29yeS1hY2NvcmRpb24uc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvZ29vZ2xlLW1hcC9nb29nbGUtbWFwLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2dyYXBoaWMtc2NhbGUvZ3JhcGhpYy1zY2FsZS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9pY29uLWJ1dHRvbi9pY29uLWJ1dHRvbi5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9pY29uLW1lc3NhZ2UvaWNvbi1tZXNzYWdlLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2luZmluaXRlLXNjcm9sbGluZy9pbmZpbml0ZS1zY3JvbGxpbmcuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvaW5wdXQtYnV0dG9uL2lucHV0LWJ1dHRvbi5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9pbnNwaXJhdGlvbi1wYWdlLWJhbm5lci9pbnNwaXJhdGlvbi1wYWdlLWJhbm5lci5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9pbnNwaXJhdGlvbl9jb250ZW50L2luc3BpcmF0aW9uX2NvbnRlbnQuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvaW5zcGlyYXRpb25fY29udGVudC1tb2RhbC9pbnNwaXJhdGlvbl9jb250ZW50LW1vZGFsLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2tlZW4tc2xpZGVyLWNhcm91c2VsL2tlZW4tc2xpZGVyLWNhcm91c2VsLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2xvYWRpbmctaW5kaWNhdG9yL2xvYWRpbmctaW5kaWNhdG9yLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2xvYWRpbmctc3Bpbm5lci9sb2FkaW5nLXNwaW5uZXIuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvbG9nby9sb2dvLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL21vZGFsLXdpbmRvdy9tb2RhbC13aW5kb3cuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvbmF2aWdhdGlvbi1kcm9wZG93bi1tZW51L25hdmlnYXRpb24tZHJvcGRvd24tbWVudS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9uYXZpZ2F0aW9uLWRyb3Bkb3duLXN1Ym1lbnUvbmF2aWdhdGlvbi1kcm9wZG93bi1zdWJtZW51LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL25hdmlnYXRpb24tZm9vdGVyL25hdmlnYXRpb24tZm9vdGVyLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL25hdmlnYXRpb24tbGlzdC1tb2JpbGUtaXRlbS9uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlLWl0ZW0uc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvbmF2aWdhdGlvbi1ub2RlLWl0ZW0vbmF2aWdhdGlvbi1ub2RlLWl0ZW0uc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvcGFnZS1pbmZvL3BhZ2UtaW5mby5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9wYW5lbC1pbmZvLWl0ZW0vcGFuZWwtaW5mby1pdGVtLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3ByaXZhY3ktbmF2aWdhdGlvbi9wcml2YWN5LW5hdmlnYXRpb24uc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvcHJvZHVjdC1ib3gvcHJvZHVjdC1ib3guc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvcHJvZHVjdC1ib3gtZG93bmxvYWRzL3Byb2R1Y3QtYm94LWRvd25sb2Fkcy5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9wcm9kdWN0LWl0ZW0tYXR0cmlidXRlcy9wcm9kdWN0LWl0ZW0tYXR0cmlidXRlcy5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9wcm9kdWN0LWl0ZW0tYmFzZS9wcm9kdWN0LWl0ZW0tYmFzZS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9wcm9kdWN0LWl0ZW0taW1hZ2UvcHJvZHVjdC1pdGVtLWltYWdlLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3Byb2R1Y3QtaXRlbS1vcHRpb25zL3Byb2R1Y3QtaXRlbS1vcHRpb25zLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3Byb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLW1vZGFsL3Byb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLW1vZGFsLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3Byb2R1Y3QtbGlzdC1zbGlkZXIvcHJvZHVjdC1saXN0LXNsaWRlci5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9wcm9kdWN0LWxpc3RpbmctYm94L3Byb2R1Y3QtbGlzdGluZy1ib3guc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvcXVhbnRpdHktY291bnRlci9xdWFudGl0eS1jb3VudGVyLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3F1YW50aXR5LWlucHV0LXNlbGVjdC9xdWFudGl0eS1pbnB1dC1zZWxlY3Quc2NzcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbm91aXNsaWRlci9kaXN0cmlidXRlL25vdWlzbGlkZXIuY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9yYW5nZS1zbGlkZXIvcmFuZ2Utc2xpZGVyLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3JlY29tbWVuZGVkLXByb2R1Y3QtYm94L3JlY29tbWVuZGVkLXByb2R1Y3QtYm94LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3JlY29tbWVuZGVkLXByb2R1Y3QtbGlzdGluZy9yZWNvbW1lbmRlZC1wcm9kdWN0LWxpc3Rpbmcuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvc2Nyb2xsLXRvLXRvcC9zY3JvbGwtdG8tdG9wLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3NlbGVjdC1idXR0b24vc2VsZWN0LWJ1dHRvbi5zY3NzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zbGljay1jYXJvdXNlbC9zbGljay9zbGljay5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9zbGljay1jYXJvdXNlbC9zbGljay1jYXJvdXNlbC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9zb2NpYWwtc2hhcmUvc29jaWFsLXNoYXJlLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1Nob3BVaS9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3N0b3J5Ymxvay9zdG9yeWJsb2suc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvdGFiL3RhYi5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy90YWJsZS1hY3Rpb24tbGlzdC90YWJsZS1hY3Rpb24tbGlzdC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy90ZXh0LWZpZWxkL3RleHQtZmllbGQuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvdG9nZ2xlLWhlYWRsaW5lL3RvZ2dsZS1oZWFkbGluZS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TaG9wVWkvVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy90b2dnbGUtc3dpdGNoL3RvZ2dsZS1zd2l0Y2guc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvdG9vbHRpcC1idXR0b24vdG9vbHRpcC1idXR0b24uc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvdXNlci1jZW50cmljcy1nb29nbGVtYXBzLW92ZXJsYXkvdXNlci1jZW50cmljcy1nb29nbGVtYXBzLW92ZXJsYXkuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU2hvcFVpL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvdXNlci1uYXZpZ2F0aW9uL3VzZXItbmF2aWdhdGlvbi5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9hY2NvcmRpb24tZWxlbWVudC1yb3cvYWNjb3JkaW9uLWVsZW1lbnQtcm93LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1N0b3J5Ymxvay9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2JpdGUta2FycmllcmUvYml0ZS1rYXJyaWVyZS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9jYXRhbG9nLWJveC9jYXRhbG9nLWJveC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9jb250ZW50LXNsaWRlci1zbGlkZS9jb250ZW50LXNsaWRlci1zbGlkZS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9jb250ZW50LXNsaWRlci1zbGlkZS1pbWFnZS9jb250ZW50LXNsaWRlci1zbGlkZS1pbWFnZS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9jb250ZW50LXNsaWRlci1zbGlkZS1pbWFnZS10ZXh0L2NvbnRlbnQtc2xpZGVyLXNsaWRlLWltYWdlLXRleHQuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU3RvcnlibG9rL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvY29udGVudC1zbGlkZXItc2xpZGUtaW1hZ2UtdGV4dC1mdWxsL2NvbnRlbnQtc2xpZGVyLXNsaWRlLWltYWdlLXRleHQtZnVsbC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9jdGEtYnV0dG9uL2N0YS1idXR0b24uc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU3RvcnlibG9rL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvY3RhLWJ1dHRvbi1udW1pbm9zL2N0YS1idXR0b24tbnVtaW5vcy5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9oZWFkbGluZS1ncm91cC9oZWFkbGluZS1ncm91cC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9pY29uLWJveC9pY29uLWJveC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9pZnJhbWUtZWxlbWVudC9pZnJhbWUtZWxlbWVudC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9pbWFnZS9pbWFnZS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9pbWFnZS1lbGVtZW50L2ltYWdlLWVsZW1lbnQuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU3RvcnlibG9rL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvaW1hZ2UtbWFwLWFyZWEvaW1hZ2UtbWFwLWFyZWEuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU3RvcnlibG9rL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvaW1hZ2UtbWFwLWFyZWEtdG9vbHRpcC9pbWFnZS1tYXAtYXJlYS10b29sdGlwLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1N0b3J5Ymxvay9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2ltYWdlLW1hcC1hcmVhLXRvb2x0aXAtY29udGVudC9pbWFnZS1tYXAtYXJlYS10b29sdGlwLWNvbnRlbnQuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU3RvcnlibG9rL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvaW1hZ2UtbWFwLWFyZWEtdG9vbHRpcC1udW1pbm9zL2ltYWdlLW1hcC1hcmVhLXRvb2x0aXAtbnVtaW5vcy5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9pbWFnZS1tYXAtYXJlYS10b29sdGlwLXByb2R1Y3QvaW1hZ2UtbWFwLWFyZWEtdG9vbHRpcC1wcm9kdWN0LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1N0b3J5Ymxvay9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2ltYWdlLW1hcC1wcm9kdWN0LWJveC9pbWFnZS1tYXAtcHJvZHVjdC1ib3guc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU3RvcnlibG9rL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvaW1hZ2UtbWFwLXNsaWRlci9pbWFnZS1tYXAtc2xpZGVyLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1N0b3J5Ymxvay9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL2ltYWdlLXRlYXNlci1mdWxsLXNpemUvaW1hZ2UtdGVhc2VyLWZ1bGwtc2l6ZS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9pbWFnZS10ZXh0LXRlYXNlci9pbWFnZS10ZXh0LXRlYXNlci5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9pbWFnZS10ZXh0LXRlYXNlci0yNS03NS9pbWFnZS10ZXh0LXRlYXNlci0yNS03NS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9pbWFnZS10ZXh0LXRlYXNlci01MC01MC9pbWFnZS10ZXh0LXRlYXNlci01MC01MC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9pbWFnZS10ZXh0LXRlYXNlci01MC01MC1zbWFsbC9pbWFnZS10ZXh0LXRlYXNlci01MC01MC1zbWFsbC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9tYXJrZXRpbmctbW9kYWwtd2luZG93L21hcmtldGluZy1tb2RhbC13aW5kb3cuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU3RvcnlibG9rL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvbmV3c2xldHRlci1lbGVtZW50L25ld3NsZXR0ZXItZWxlbWVudC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL21vbGVjdWxlcy9wcm9kdWN0LWNhdGVnb3J5LXRlYXNlci1ib3gvcHJvZHVjdC1jYXRlZ29yeS10ZWFzZXItYm94LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1N0b3J5Ymxvay9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3Byb2R1Y3QtbGFuZGluZy1wYWdlLWhlcm8tdGVhc2VyL3Byb2R1Y3QtbGFuZGluZy1wYWdlLWhlcm8tdGVhc2VyLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1N0b3J5Ymxvay9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3Byb2R1Y3QtbGFuZGluZy1wYWdlLWluZm8tYm94L3Byb2R1Y3QtbGFuZGluZy1wYWdlLWluZm8tYm94LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1N0b3J5Ymxvay9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3Byb2R1Y3QtbGFuZGluZy1wYWdlLXRlYXNlci9wcm9kdWN0LWxhbmRpbmctcGFnZS10ZWFzZXIuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU3RvcnlibG9rL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvcHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UvcHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2Uuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU3RvcnlibG9rL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvcHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtaGVyby10ZWFzZXIvcHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtaGVyby10ZWFzZXIuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU3RvcnlibG9rL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvcXVvdGUtZWxlbWVudC9xdW90ZS1lbGVtZW50LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1N0b3J5Ymxvay9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3NlcnZpY2Utc2lkZWJhci9zZXJ2aWNlLXNpZGViYXIuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU3RvcnlibG9rL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvc2VydmljZS1zaWRlYmFyLWNvbnRlbnQvc2VydmljZS1zaWRlYmFyLWNvbnRlbnQuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU3RvcnlibG9rL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvdGVhc2VyLWJveC90ZWFzZXItYm94LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1N0b3J5Ymxvay9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvbW9sZWN1bGVzL3RleHQtZWxlbWVudC90ZXh0LWVsZW1lbnQuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU3RvcnlibG9rL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvdmlkZW8vdmlkZW8uc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU3RvcnlibG9rL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9tb2xlY3VsZXMvem9vbS1vdmVybGF5L3pvb20tb3ZlcmxheS5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL29yZ2FuaXNtcy9hY2NvcmRpb24tZWxlbWVudC9hY2NvcmRpb24tZWxlbWVudC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL29yZ2FuaXNtcy9jYXRhbG9nLWVsZW1lbnQvY2F0YWxvZy1lbGVtZW50LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1N0b3J5Ymxvay9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL2NvbnRhaW5lci1lbGVtZW50L2NvbnRhaW5lci1lbGVtZW50LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1N0b3J5Ymxvay9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL2NvbnRlbnQtc2xpZGVyL2NvbnRlbnQtc2xpZGVyLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1N0b3J5Ymxvay9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL2Zvcm0tZWxlbWVudC9mb3JtLWVsZW1lbnQuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU3RvcnlibG9rL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9vcmdhbmlzbXMvZ2FsbGVyeS1lbGVtZW50L2dhbGxlcnktZWxlbWVudC5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL29yZ2FuaXNtcy9pY29uLXRlYXNlci9pY29uLXRlYXNlci5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL29yZ2FuaXNtcy9pbWFnZS1pY29uLXRlYXNlci9pbWFnZS1pY29uLXRlYXNlci5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL29yZ2FuaXNtcy9pbWFnZS1tYXAvaW1hZ2UtbWFwLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1N0b3J5Ymxvay9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL2ltYWdlLXNsaWRlci9pbWFnZS1zbGlkZXIuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU3RvcnlibG9rL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9vcmdhbmlzbXMvaW1hZ2UtdGV4dC10ZWFzZXItZ3JpZC9pbWFnZS10ZXh0LXRlYXNlci1ncmlkLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1N0b3J5Ymxvay9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL3Byb2R1Y3QtY2F0ZWdvcnktdGVhc2VyL3Byb2R1Y3QtY2F0ZWdvcnktdGVhc2VyLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1N0b3J5Ymxvay9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL3Byb2R1Y3QtbGFuZGluZy1wYWdlLWV4cGxvc2lvbi1ncmFwaGljL3Byb2R1Y3QtbGFuZGluZy1wYWdlLWV4cGxvc2lvbi1ncmFwaGljLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL0Jlc3RJdC9ZdmVzL1N0b3J5Ymxvay9UaGVtZS9kZWZhdWx0L2NvbXBvbmVudHMvb3JnYW5pc21zL3Byb2R1Y3QtbGFuZGluZy1wYWdlLWV4cGxvc2lvbi1ncmFwaGljcy9wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY3Muc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU3RvcnlibG9rL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9vcmdhbmlzbXMvcHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VzL3Byb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlcy5zY3NzIiwid2VicGFjazovLy8uL3NyYy9CZXN0SXQvWXZlcy9TdG9yeWJsb2svVGhlbWUvZGVmYXVsdC9jb21wb25lbnRzL29yZ2FuaXNtcy9zZXJ2aWNlLXNpZGViYXJzL3NlcnZpY2Utc2lkZWJhcnMuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvQmVzdEl0L1l2ZXMvU3RvcnlibG9rL1RoZW1lL2RlZmF1bHQvY29tcG9uZW50cy9vcmdhbmlzbXMvdGFicy1lbGVtZW50L3RhYnMtZWxlbWVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNsaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3BTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDaFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3BTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN4WEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3BVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUMzN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUM1aEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNuWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNqZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3RlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ2xZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzd6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3ZYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDNWJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUM1U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ2pYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNuZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3BYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3JTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDalVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ25UQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDaFZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDN2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDMVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUM5V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ2xUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNoV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN6bEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUMzV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNoZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDL3VCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDL1lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUM1U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNqVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDcFNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ2pZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDM1dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3JVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN4akJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNyVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUMzaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzlVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN0WkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN2VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDclVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDL1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN6U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNoWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDeGRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDOWxDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDN1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzEvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzlaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3hTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDeGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3JkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUM5VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ25WQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDellBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNyWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzVWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUMxU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDeFVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDclZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDL2tCQSx1QkFBdUIscURBQXFELDZDQUE2QyxnQkFBZ0IsNkJBQTZCLDJCQUEyQiw0QkFBNEIsMEJBQTBCLFdBQVcsd0RBQXdELFlBQVksZUFBZSxnQkFBZ0Isa0JBQWtCLGFBQWEsOEJBQThCLHNCQUFzQixhQUFhLGtDQUFrQyxzQkFBc0IsOEJBQThCLGtCQUFrQixPQUFPLE1BQU0sV0FBVyxhQUFhLHVCQUF1QixTQUFTLDhCQUE4Qix1QkFBdUIsaUJBQWlCLDJCQUEyQix5QkFBeUIsc0JBQXNCLHFCQUFxQixvQkFBb0IsaUJBQWlCLGlDQUFpQyx1QkFBdUIsNEJBQTRCLHVCQUF1QixpQ0FBaUMsdUJBQXVCLHFDQUFxQyxxQkFBcUIsZ0JBQWdCLHdCQUF3QixnQkFBZ0IseUJBQXlCLDhCQUE4QixzQkFBc0IsVUFBVSxTQUFTLG9GQUFvRixhQUFhLGtHQUFrRyxjQUFjLDBDQUEwQyxZQUFZLFdBQVcsZ0JBQWdCLHFEQUFxRCxZQUFZLGlCQUFpQixjQUFjLDJEQUEyRCxZQUFZLDBDQUEwQyxXQUFXLFdBQVcsa0JBQWtCLGdCQUFnQixhQUFhLHFEQUFxRCxZQUFZLGlCQUFpQixjQUFjLG9FQUFvRSxlQUFlLGtCQUFrQiwyQ0FBMkMsa0JBQWtCLGtCQUFrQiwySkFBMkosb0NBQW9DLGk0REFBaTRELHVDQUF1QyxXQUFXLGdDQUFnQyxxQkFBcUIsVUFBVSxZQUFZLHNCQUFzQixvQ0FBb0MsV0FBVyw0QkFBNEIsNENBQTRDLFdBQVcsNEJBQTRCLGdCQUFnQixvQ0FBb0MsWUFBWSx3QkFBd0Isb0hBQW9ILDZCQUE2Qiw0QkFBNEIsY0FBYyxlQUFlLGNBQWMsWUFBWSxXQUFXLCtCQUErQixvQkFBb0IsZ0JBQWdCLFVBQVUsa0JBQWtCLGlCQUFpQixtQkFBbUIsV0FBVyxZQUFZLDhHQUE4RyxXQUFXLGdDQUFnQyxZQUFZLFdBQVcsY0FBYyxpQkFBaUIsZUFBZSxvSUFBb0ksV0FBVyxjQUFjLGtCQUFrQix1REFBdUQsNEJBQTRCLGtCQUFrQixhQUFhLDJEQUEyRCxhQUFhLGdCQUFnQiw2QkFBNkIsbUVBQW1FLG1CQUFtQiwwQkFBMEIsV0FBVyxlQUFlLGtCQUFrQix5QkFBeUIsZUFBZSxzQkFBc0IsWUFBWSxpQkFBaUIsK0VBQStFLG1CQUFtQixzSUFBc0ksVUFBVSxnQ0FBZ0MscUNBQXFDLGVBQWUsa0JBQWtCLGFBQWEsU0FBUyxnQkFBZ0IsZUFBZSxpQkFBaUIsaUJBQWlCLHNCQUFzQixXQUFXLFlBQVksa0JBQWtCLGVBQWUsZ0RBQWdELDBCQUEwQiw2Q0FBNkMsWUFBWSxvREFBb0Qsc0JBQXNCLGtCQUFrQixRQUFRLFNBQVMsWUFBWSxhQUFhLGdCQUFnQixpQkFBaUIsa0JBQWtCLHVFQUF1RSxXQUFXLHNFQUFzRSxVQUFVLDZFQUE2RSxXQUFXLG1CQUFtQix1RUFBdUUseUJBQXlCLGdDQUFnQyxzRkFBc0YsZ0JBQWdCLDZDQUE2QyxxQ0FBcUMsV0FBVyxnQkFBZ0IscUNBQXFDLFlBQVksaUJBQWlCLHdDQUF3QyxXQUFXLG9DQUFvQyxXQUFXLGdCQUFnQiw4Q0FBOEMseUJBQXlCLFdBQVcsK0NBQStDLGtCQUFrQiwyQ0FBMkMsWUFBWSxzRkFBc0Ysa0JBQWtCLG1CQUFtQixzQkFBc0IsV0FBVyxlQUFlLGlCQUFpQixzQkFBc0IsVUFBVSx5QkFBeUIsZUFBZSxZQUFZLHdIQUF3SCxZQUFZLDJDQUEyQyxtQkFBbUIsd0RBQXdELFdBQVcsc0VBQXNFLG1CQUFtQiw2Q0FBNkMscUNBQXFDLFdBQVcsbUVBQW1FLG1CQUFtQiw2Q0FBNkMscUNBQXFDLFdBQVcsc01BQXNNLGdCQUFnQiw2Q0FBNkMscUNBQXFDLFdBQVcsZ0JBQWdCLHlMQUF5TCxXQUFXLCtCQUErQixlQUFlLDhFQUE4RSxXQUFXLCtCQUErQiwwSEFBMEgsc0JBQXNCLDhCQUE4QixtQ0FBbUMsMkJBQTJCLHdMQUF3TCwyQkFBMkIsd0RBQXdELGdEQUFnRCxzQkFBc0IsMEpBQTBKLHlCQUF5Qiw4QkFBOEIsc0NBQXNDLDhCQUE4QiwyQ0FBMkMsZ0JBQWdCLGtCQUFrQixXQUFXLGVBQWUseUNBQXlDLHNCQUFzQixlQUFlLFdBQVcsV0FBVyxnQkFBZ0IsMkNBQTJDLHNCQUFzQixpREFBaUQsc0JBQXNCLGlCQUFpQixrQkFBa0Isc0JBQXNCLG1DQUFtQywyQkFBMkIsWUFBWSxrQkFBa0Isa0JBQWtCLGtCQUFrQixVQUFVLFFBQVEsTUFBTSxTQUFTLGVBQWUsb0RBQW9ELE9BQU8sV0FBVyxxQkFBcUIsa0JBQWtCLG1DQUFtQywyREFBMkQsbURBQW1ELGdCQUFnQiw2QkFBNkIsMkJBQTJCLDRCQUE0QiwwQkFBMEIsV0FBVyx1RUFBdUUsNkJBQTZCLCtFQUErRSxtQkFBbUIsMEJBQTBCLFdBQVcsaURBQWlELHNCQUFzQixnRUFBZ0Usc0JBQXNCLGdCQUFnQix5RkFBeUYsV0FBVyxtQkFBbUIsa0dBQWtHLGdCQUFnQiw2Q0FBNkMscUNBQXFDLFdBQVcsMk1BQTJNLG9DQUFvQyxpM0RBQWkzRCw4R0FBOEcsbUJBQW1CLHNCQUFzQixXQUFXLHVEQUF1RCxtQkFBbUIsb0VBQW9FLFdBQVcsa0ZBQWtGLG1CQUFtQiw2Q0FBNkMscUNBQXFDLFdBQVcsK0VBQStFLG1CQUFtQiw2Q0FBNkMscUNBQXFDLFdBQVcsME9BQTBPLGdCQUFnQiw2Q0FBNkMscUNBQXFDLFdBQVcsa0pBQWtKLHNCQUFzQiw4QkFBOEIsdURBQXVELFdBQVcscURBQXFELHNCQUFzQix1REFBdUQsc0JBQXNCLDZEQUE2RCxzQkFBc0IsOEJBQThCLHNCQUFzQixnREFBZ0QsMkJBQTJCLDZDQUE2QyxjQUFjLGlDQUFpQyxlQUFlLFdBQVcsY0FBYyxlQUFlLDZDQUE2QyxtREFBbUQsZUFBZSxnQkFBZ0IsY0FBYyxZQUFZLGtCQUFrQiwwQkFBMEIseUJBQXlCLHVHQUF1Ryx5REFBeUQsNkdBQTZHLHNOQUFzTixjQUFjLHVHQUF1Ryx5REFBeUQ7O0FDQXR1Z0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNwVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN0VUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUM1VUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNwVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ25WQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN2U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDbFVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDenZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDclRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDM1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ2hZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDbFRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDaldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEM7QUNuaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3JVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDdFNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNwWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3BkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDelNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQy9UQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUM3U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3pWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN2ZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQy9WQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3hWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDdFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDcFpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3RUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDalVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN6ZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNqVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN6WEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUMzbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzlYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzlZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUM3U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNuWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDNVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDM1NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNyb0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3ZlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNqYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNsc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDcmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3pXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNyVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNqV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDaFpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDbHJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3ZUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUM5VUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3poQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDNVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDcmJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNwVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDdlNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzVXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUM1VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNuVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDcFNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNoYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUM5U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDL2FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNqakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDcFdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ2pWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDM1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUM1U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN2WkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDblRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNsVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDMVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN2VUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUMxNENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDbGJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNwVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUMvVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3pTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDemhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3pVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDemFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3hVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDbllBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDNWxCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3RVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDM1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDemRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNyV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3ZhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDaHFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzlTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUMzVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3JsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN6NkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNoOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDdlRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3RUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ2xYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDMVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDaGpCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQy9YQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDeFdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3JuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDN1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzlhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUM1WkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzdVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDM1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDO0FDMVhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDcmtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDL1NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3BTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUMxVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDdlZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN2VUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3ZVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3BXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDaFlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ2xVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNwL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDeFZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3BTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDeFRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHO0FDclNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUMxVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDMVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ2hUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNwU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDMVZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDNVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzdTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzNTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN2U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDdlNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDL1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDOVZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNyVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNyVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3JUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN2WUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNyWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN0YUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN4bEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNobEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDendCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQztBQzU1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDNWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDeFRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDdGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNsVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDdmVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUM5NEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNwWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUM1WEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUM3VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzVWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDO0FDM1NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDM1NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN4VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN0ZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDdlNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNyVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN0VUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUNoVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzVTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzdsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQzVTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3hZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDbFRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ2xVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUN2U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDMVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7QUM5ZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDO0FDM1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQztBQ3RUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLEtBQUs7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEM7QUN0ZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0JBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQyIsImZpbGUiOiIuL2Nzcy95dmVzX2RlZmF1bHQuY3JpdGljYWwuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQXBwbGllcyBvciBvdmVycmlkZXMgZGVmYXVsdCBzdHlsZXMgb2YgdGhlIEhUTUwgZWxlbWVudHMgZm9yIGEgbW9yZSBwcmVkaWN0YWJsZVxuICogYW5kIGNvbnZlbmllbnQgYmVoYXZpb3IgaW4gZGlmZmVyZW50IGJyb3dzZXJzLlxuICovXG4vKipcbiAqIFNldHMgZm9udCBhbmQgYmFzaWMgdHlwb2dyYXBoeSBzdHlsZXMgZm9yIHRoZSBtYWluIEhUTUwgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIGZvciB0aGUgY3VzdG9tIHJlc3BvbnNpdmUgZ3JpZCBzeXN0ZW0gd2l0aCBmbGV4aWJsZSBjb2x1bW5zXG4gKiBhbmQgY29uZmlndXJhYmxlIGNvbHVtbnMgY291bnQsIGNvbnRhaW5lciB3aXRoIG1heGltdW0gY29udGVudCB3aWR0aFxuICogYW5kIG1vZGlmaWVycyBmb3IgYWxpZ25tZW50LlxuICogR3JpZCBzeXN0ZW0gcGFyYW1ldGVycyBjYW4gYmUgY3VzdG9taXplZCBpbiBncmlkIHNldHRpbmdzIGZpbGUuXG4gKi9cbi8qKlxuICogSW1wbGVtZW50cyBzaW1wbGUgYW5pbWF0aW9ucy5cbiAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgc2VsZWN0b3ItY2xhc3MtcGF0dGVybixkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbioge1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDA7XG4gIGZvbnQ6IGluaGVyaXQ7XG4gIGNvbG9yOiBpbmhlcml0O1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG59XG4qOmhvdmVyLCAqOmFjdGl2ZSwgKjpmb2N1cyB7XG4gIG91dGxpbmU6IDA7XG59XG4qOjpiZWZvcmUsICo6OmFmdGVyIHtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG5odG1sLFxuYm9keSB7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuYm9keSB7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgLyogUHJldmVudCBXZWJraXQgYW5kIFdpbmRvd3MgTW9iaWxlIHBsYXRmb3JtcyBmcm9tIGNoYW5naW5nIGRlZmF1bHQgZm9udCBzaXplcywgd2hpbGUgbm90IGJyZWFraW5nIGRlc2t0b3AgZGVzaWduLiAqL1xuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG4gIC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xufVxuXG5odG1sIHtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiAwO1xuICBmb250OiBpbmhlcml0O1xuICBjb2xvcjogaW5oZXJpdDtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBzY3JvbGwtYmVoYXZpb3I6IHNtb290aDtcbn1cblxuYXJ0aWNsZSxcbmFzaWRlLFxuZGV0YWlscyxcbmZpZ2NhcHRpb24sXG5maWd1cmUsXG5mb290ZXIsXG5oZWFkZXIsXG5oZ3JvdXAsXG5tZW51LFxubmF2LFxuc2VjdGlvbixcbmZvcm0ge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxudWwge1xuICBsaXN0LXN0eWxlOiBub25lO1xufVxuXG5ibG9ja3F1b3RlLFxucSB7XG4gIHF1b3Rlczogbm9uZTtcbn1cbmJsb2NrcXVvdGU6OmJlZm9yZSwgYmxvY2txdW90ZTo6YWZ0ZXIsXG5xOjpiZWZvcmUsXG5xOjphZnRlciB7XG4gIGNvbnRlbnQ6IG5vbmU7XG59XG5cbnRhYmxlIHtcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgYm9yZGVyLXNwYWNpbmc6IDA7XG59XG5cbmltZyB7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgbWF4LWhlaWdodDogMTAwJTtcbn1cblxuLmN1c3RvbS1lbGVtZW50IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogXCJMYXRvXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgc3JjOiB1cmwoXCIvYXNzZXRzL2N1cnJlbnQvZGVmYXVsdC9mb250cy9MYXRvLUxpZ2h0LndvZmZcIik7XG4gIHNyYzogbG9jYWwoXCJMYXRvIExpZ2h0XCIpLCBsb2NhbChcIkxhdG8tTGlnaHRcIiksIHVybChcIi9hc3NldHMvY3VycmVudC9kZWZhdWx0L2ZvbnRzL0xhdG8tTGlnaHQud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksIHVybChcIi9hc3NldHMvY3VycmVudC9kZWZhdWx0L2ZvbnRzL0xhdG8tTGlnaHQud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpLCB1cmwoXCIvYXNzZXRzL2N1cnJlbnQvZGVmYXVsdC9mb250cy9MYXRvLUxpZ2h0LnR0ZlwiKSBmb3JtYXQoXCJ0cnVldHlwZVwiKTtcbn1cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogXCJMYXRvXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgc3JjOiB1cmwoXCIvYXNzZXRzL2N1cnJlbnQvZGVmYXVsdC9mb250cy9MYXRvLUJvbGQud29mZlwiKTtcbiAgc3JjOiBsb2NhbChcIkxhdG8gQm9sZFwiKSwgbG9jYWwoXCJMYXRvLUJvbGRcIiksIHVybChcIi9hc3NldHMvY3VycmVudC9kZWZhdWx0L2ZvbnRzL0xhdG8tQm9sZC53b2ZmMlwiKSBmb3JtYXQoXCJ3b2ZmMlwiKSwgdXJsKFwiL2Fzc2V0cy9jdXJyZW50L2RlZmF1bHQvZm9udHMvTGF0by1Cb2xkLndvZmZcIikgZm9ybWF0KFwid29mZlwiKSwgdXJsKFwiL2Fzc2V0cy9jdXJyZW50L2RlZmF1bHQvZm9udHMvTGF0by1Cb2xkLnR0ZlwiKSBmb3JtYXQoXCJ0cnVldHlwZVwiKTtcbn1cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogXCJMYXRvXCI7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgc3JjOiB1cmwoXCIvYXNzZXRzL2ZvbnRzL0xhdG8tUmVndWxhci53b2ZmXCIpO1xuICBzcmM6IGxvY2FsKFwiTGF0byBSZWd1bGFyXCIpLCBsb2NhbChcIkxhdG8tUmVndWxhclwiKSwgdXJsKFwiL2Fzc2V0cy9jdXJyZW50L2RlZmF1bHQvZm9udHMvTGF0by1SZWd1bGFyLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLCB1cmwoXCIvYXNzZXRzL2N1cnJlbnQvZGVmYXVsdC9mb250cy9MYXRvLVJlZ3VsYXIud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpLCB1cmwoXCIvYXNzZXRzL2N1cnJlbnQvZGVmYXVsdC9mb250cy9MYXRvLVJlZ3VsYXIudHRmXCIpIGZvcm1hdChcInRydWV0eXBlXCIpO1xufVxuaHRtbCB7XG4gIGZvbnQtc2l6ZTogMTVweDtcbn1cblxuYm9keSB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgZm9udC1mYW1pbHk6IFwiTGF0b1wiLCBzYW5zLXNlcmlmO1xufVxuXG4qIHtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG5cbmgxIHtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAyLjRyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjE7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cblxuaDIge1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LXNpemU6IDJyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjI7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cblxuaDMge1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LXNpemU6IDEuNDY2NjY2NjY2N3JlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuXG5oNCB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xuICBsaW5lLWhlaWdodDogMS42O1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG5cbmg1IHtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS44O1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG5cbmg2IHtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjk7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cblxuYSB7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlIHNlbGVjdG9yLW1heC10eXBlICovXG4gIC8qIHN0eWxlbGludC1lbmFibGUgc2VsZWN0b3ItbWF4LXR5cGUgKi9cbn1cbmEgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbmE6aG92ZXIge1xuICBjb2xvcjogI2ZlY2MwMDtcbn1cbmE6aG92ZXIgc3ZnIHtcbiAgZmlsbDogI2ZlY2MwMDtcbn1cblxuYixcbnN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG5cbmksXG5lbSxcbmNpdGUge1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbmhyIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNiMmIyYjI7XG4gIG1hcmdpbjogMC41cmVtIDA7XG59XG5ocjo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgY2xlYXI6IGJvdGg7XG59XG5cbnNtYWxsIHtcbiAgZm9udC1zaXplOiAwLjhyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIHNtYWxsIHtcbiAgICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgfVxufVxuXG5iaWcge1xuICBmb250LXNpemU6IDIuNHJlbTtcbn1cblxucCxcbmJsb2NrcXVvdGUsXG5pZnJhbWUge1xuICBtYXJnaW46IDAuNXJlbSAwO1xufVxuXG4uY29udGFpbmVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEyMDBweDtcbiAgbWFyZ2luOiBhdXRvO1xuICBwYWRkaW5nOiAwIDE1cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDApIHtcbiAgLmNvbnRhaW5lci0tdHJhY2stY29uZmlndXJhdG9yIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jb250YWluZXItLXRyYWNrLWNvbmZpZ3VyYXRvciB7XG4gICAgcGFkZGluZzogMCAxNXB4O1xuICB9XG59XG4uY29udGFpbmVyLS1jaGVja291dCB7XG4gIG1heC13aWR0aDogOTkwcHg7XG59XG5AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpLCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSkge1xuICAuY29udGFpbmVyLS1jaGVja291dCB7XG4gICAgcGFkZGluZy1ib3R0b206IDhyZW07XG4gIH1cbn1cbi5jb250YWluZXItLWV4cGFuZCB7XG4gIG1heC13aWR0aDogMTAwJTtcbn1cbi5jb250YWluZXItLXBkcC1oZWFkZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG59XG4uY29udGFpbmVyLS1mdWxsLXdpZHRoIHtcbiAgbWF4LXdpZHRoOiAxOTIwcHg7XG59XG4uY29udGFpbmVyLS1tZWRpdW0ge1xuICBtYXgtd2lkdGg6IDE0NDBweDtcbn1cbi5jb250YWluZXItLW5vLXBhZGRpbmcge1xuICBwYWRkaW5nOiAwO1xufVxuLmNvbnRhaW5lci0tbm8tcGFkZGluZy1sZWZ0IHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xufVxuXG4uY29sIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICAtd2Via2l0LWJveC1mbGV4OiAwO1xuICAgICAgLW1zLWZsZXgtcG9zaXRpdmU6IDA7XG4gICAgICAgICAgZmxleC1ncm93OiAwO1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0bztcbiAgICAgIGZsZXgtYmFzaXM6IGF1dG87XG59XG4uY29sOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICBjbGVhcjogYm90aDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMCkge1xuICAuY29sLS1zbS0xIHtcbiAgICB3aWR0aDogOC4zMzMzMzMzMzMzJTtcbiAgICBtaW4td2lkdGg6IDguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC0tc20tMiB7XG4gICAgd2lkdGg6IDE2LjY2NjY2NjY2NjclO1xuICAgIG1pbi13aWR0aDogMTYuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC0tc20tMyB7XG4gICAgd2lkdGg6IDI1JTtcbiAgICBtaW4td2lkdGg6IDI1JTtcbiAgfVxuICAuY29sLS1zbS00IHtcbiAgICB3aWR0aDogMzMuMzMzMzMzMzMzMyU7XG4gICAgbWluLXdpZHRoOiAzMy4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLS1zbS01IHtcbiAgICB3aWR0aDogNDEuNjY2NjY2NjY2NyU7XG4gICAgbWluLXdpZHRoOiA0MS42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLS1zbS02IHtcbiAgICB3aWR0aDogNTAlO1xuICAgIG1pbi13aWR0aDogNTAlO1xuICB9XG4gIC5jb2wtLXNtLTcge1xuICAgIHdpZHRoOiA1OC4zMzMzMzMzMzMzJTtcbiAgICBtaW4td2lkdGg6IDU4LjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtLXNtLTgge1xuICAgIHdpZHRoOiA2Ni42NjY2NjY2NjY3JTtcbiAgICBtaW4td2lkdGg6IDY2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtLXNtLTkge1xuICAgIHdpZHRoOiA3NSU7XG4gICAgbWluLXdpZHRoOiA3NSU7XG4gIH1cbiAgLmNvbC0tc20tMTAge1xuICAgIHdpZHRoOiA4My4zMzMzMzMzMzMzJTtcbiAgICBtaW4td2lkdGg6IDgzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtLXNtLTExIHtcbiAgICB3aWR0aDogOTEuNjY2NjY2NjY2NyU7XG4gICAgbWluLXdpZHRoOiA5MS42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLS1zbS0xMiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWluLXdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb2wtLXNtLWF1dG8ge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIG1pbi13aWR0aDogMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAwKSB7XG4gIC5jb2wtLXNwLTEge1xuICAgIHdpZHRoOiA4LjMzMzMzMzMzMzMlO1xuICAgIG1pbi13aWR0aDogOC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLS1zcC0yIHtcbiAgICB3aWR0aDogMTYuNjY2NjY2NjY2NyU7XG4gICAgbWluLXdpZHRoOiAxNi42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLS1zcC0zIHtcbiAgICB3aWR0aDogMjUlO1xuICAgIG1pbi13aWR0aDogMjUlO1xuICB9XG4gIC5jb2wtLXNwLTQge1xuICAgIHdpZHRoOiAzMy4zMzMzMzMzMzMzJTtcbiAgICBtaW4td2lkdGg6IDMzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtLXNwLTUge1xuICAgIHdpZHRoOiA0MS42NjY2NjY2NjY3JTtcbiAgICBtaW4td2lkdGg6IDQxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtLXNwLTYge1xuICAgIHdpZHRoOiA1MCU7XG4gICAgbWluLXdpZHRoOiA1MCU7XG4gIH1cbiAgLmNvbC0tc3AtNyB7XG4gICAgd2lkdGg6IDU4LjMzMzMzMzMzMzMlO1xuICAgIG1pbi13aWR0aDogNTguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC0tc3AtOCB7XG4gICAgd2lkdGg6IDY2LjY2NjY2NjY2NjclO1xuICAgIG1pbi13aWR0aDogNjYuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC0tc3AtOSB7XG4gICAgd2lkdGg6IDc1JTtcbiAgICBtaW4td2lkdGg6IDc1JTtcbiAgfVxuICAuY29sLS1zcC0xMCB7XG4gICAgd2lkdGg6IDgzLjMzMzMzMzMzMzMlO1xuICAgIG1pbi13aWR0aDogODMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC0tc3AtMTEge1xuICAgIHdpZHRoOiA5MS42NjY2NjY2NjY3JTtcbiAgICBtaW4td2lkdGg6IDkxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtLXNwLTEyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbiAgLmNvbC0tc3AtYXV0byB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgbWluLXdpZHRoOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5jb2wtLW1kLTEge1xuICAgIHdpZHRoOiA4LjMzMzMzMzMzMzMlO1xuICAgIG1pbi13aWR0aDogOC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLS1tZC0yIHtcbiAgICB3aWR0aDogMTYuNjY2NjY2NjY2NyU7XG4gICAgbWluLXdpZHRoOiAxNi42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLS1tZC0zIHtcbiAgICB3aWR0aDogMjUlO1xuICAgIG1pbi13aWR0aDogMjUlO1xuICB9XG4gIC5jb2wtLW1kLTQge1xuICAgIHdpZHRoOiAzMy4zMzMzMzMzMzMzJTtcbiAgICBtaW4td2lkdGg6IDMzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtLW1kLTUge1xuICAgIHdpZHRoOiA0MS42NjY2NjY2NjY3JTtcbiAgICBtaW4td2lkdGg6IDQxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtLW1kLTYge1xuICAgIHdpZHRoOiA1MCU7XG4gICAgbWluLXdpZHRoOiA1MCU7XG4gIH1cbiAgLmNvbC0tbWQtNyB7XG4gICAgd2lkdGg6IDU4LjMzMzMzMzMzMzMlO1xuICAgIG1pbi13aWR0aDogNTguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC0tbWQtOCB7XG4gICAgd2lkdGg6IDY2LjY2NjY2NjY2NjclO1xuICAgIG1pbi13aWR0aDogNjYuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC0tbWQtOSB7XG4gICAgd2lkdGg6IDc1JTtcbiAgICBtaW4td2lkdGg6IDc1JTtcbiAgfVxuICAuY29sLS1tZC0xMCB7XG4gICAgd2lkdGg6IDgzLjMzMzMzMzMzMzMlO1xuICAgIG1pbi13aWR0aDogODMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC0tbWQtMTEge1xuICAgIHdpZHRoOiA5MS42NjY2NjY2NjY3JTtcbiAgICBtaW4td2lkdGg6IDkxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtLW1kLTEyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbiAgLmNvbC0tbWQtYXV0byB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgbWluLXdpZHRoOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jb2wtLWxnLTEge1xuICAgIHdpZHRoOiA4LjMzMzMzMzMzMzMlO1xuICAgIG1pbi13aWR0aDogOC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLS1sZy0yIHtcbiAgICB3aWR0aDogMTYuNjY2NjY2NjY2NyU7XG4gICAgbWluLXdpZHRoOiAxNi42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLS1sZy0zIHtcbiAgICB3aWR0aDogMjUlO1xuICAgIG1pbi13aWR0aDogMjUlO1xuICB9XG4gIC5jb2wtLWxnLTQge1xuICAgIHdpZHRoOiAzMy4zMzMzMzMzMzMzJTtcbiAgICBtaW4td2lkdGg6IDMzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtLWxnLTUge1xuICAgIHdpZHRoOiA0MS42NjY2NjY2NjY3JTtcbiAgICBtaW4td2lkdGg6IDQxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtLWxnLTYge1xuICAgIHdpZHRoOiA1MCU7XG4gICAgbWluLXdpZHRoOiA1MCU7XG4gIH1cbiAgLmNvbC0tbGctNyB7XG4gICAgd2lkdGg6IDU4LjMzMzMzMzMzMzMlO1xuICAgIG1pbi13aWR0aDogNTguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC0tbGctOCB7XG4gICAgd2lkdGg6IDY2LjY2NjY2NjY2NjclO1xuICAgIG1pbi13aWR0aDogNjYuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC0tbGctOSB7XG4gICAgd2lkdGg6IDc1JTtcbiAgICBtaW4td2lkdGg6IDc1JTtcbiAgfVxuICAuY29sLS1sZy0xMCB7XG4gICAgd2lkdGg6IDgzLjMzMzMzMzMzMzMlO1xuICAgIG1pbi13aWR0aDogODMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC0tbGctMTEge1xuICAgIHdpZHRoOiA5MS42NjY2NjY2NjY3JTtcbiAgICBtaW4td2lkdGg6IDkxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtLWxnLTEyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbiAgLmNvbC0tbGctYXV0byB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgbWluLXdpZHRoOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuY29sLS14bC0xIHtcbiAgICB3aWR0aDogOC4zMzMzMzMzMzMzJTtcbiAgICBtaW4td2lkdGg6IDguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC0teGwtMiB7XG4gICAgd2lkdGg6IDE2LjY2NjY2NjY2NjclO1xuICAgIG1pbi13aWR0aDogMTYuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC0teGwtMyB7XG4gICAgd2lkdGg6IDI1JTtcbiAgICBtaW4td2lkdGg6IDI1JTtcbiAgfVxuICAuY29sLS14bC00IHtcbiAgICB3aWR0aDogMzMuMzMzMzMzMzMzMyU7XG4gICAgbWluLXdpZHRoOiAzMy4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLS14bC01IHtcbiAgICB3aWR0aDogNDEuNjY2NjY2NjY2NyU7XG4gICAgbWluLXdpZHRoOiA0MS42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLS14bC02IHtcbiAgICB3aWR0aDogNTAlO1xuICAgIG1pbi13aWR0aDogNTAlO1xuICB9XG4gIC5jb2wtLXhsLTcge1xuICAgIHdpZHRoOiA1OC4zMzMzMzMzMzMzJTtcbiAgICBtaW4td2lkdGg6IDU4LjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtLXhsLTgge1xuICAgIHdpZHRoOiA2Ni42NjY2NjY2NjY3JTtcbiAgICBtaW4td2lkdGg6IDY2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtLXhsLTkge1xuICAgIHdpZHRoOiA3NSU7XG4gICAgbWluLXdpZHRoOiA3NSU7XG4gIH1cbiAgLmNvbC0teGwtMTAge1xuICAgIHdpZHRoOiA4My4zMzMzMzMzMzMzJTtcbiAgICBtaW4td2lkdGg6IDgzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtLXhsLTExIHtcbiAgICB3aWR0aDogOTEuNjY2NjY2NjY2NyU7XG4gICAgbWluLXdpZHRoOiA5MS42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLS14bC0xMiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWluLXdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb2wtLXhsLWF1dG8ge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIG1pbi13aWR0aDogMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLmNvbC0teHhsLTEge1xuICAgIHdpZHRoOiA4LjMzMzMzMzMzMzMlO1xuICAgIG1pbi13aWR0aDogOC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLS14eGwtMiB7XG4gICAgd2lkdGg6IDE2LjY2NjY2NjY2NjclO1xuICAgIG1pbi13aWR0aDogMTYuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC0teHhsLTMge1xuICAgIHdpZHRoOiAyNSU7XG4gICAgbWluLXdpZHRoOiAyNSU7XG4gIH1cbiAgLmNvbC0teHhsLTQge1xuICAgIHdpZHRoOiAzMy4zMzMzMzMzMzMzJTtcbiAgICBtaW4td2lkdGg6IDMzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtLXh4bC01IHtcbiAgICB3aWR0aDogNDEuNjY2NjY2NjY2NyU7XG4gICAgbWluLXdpZHRoOiA0MS42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLS14eGwtNiB7XG4gICAgd2lkdGg6IDUwJTtcbiAgICBtaW4td2lkdGg6IDUwJTtcbiAgfVxuICAuY29sLS14eGwtNyB7XG4gICAgd2lkdGg6IDU4LjMzMzMzMzMzMzMlO1xuICAgIG1pbi13aWR0aDogNTguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC0teHhsLTgge1xuICAgIHdpZHRoOiA2Ni42NjY2NjY2NjY3JTtcbiAgICBtaW4td2lkdGg6IDY2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtLXh4bC05IHtcbiAgICB3aWR0aDogNzUlO1xuICAgIG1pbi13aWR0aDogNzUlO1xuICB9XG4gIC5jb2wtLXh4bC0xMCB7XG4gICAgd2lkdGg6IDgzLjMzMzMzMzMzMzMlO1xuICAgIG1pbi13aWR0aDogODMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC0teHhsLTExIHtcbiAgICB3aWR0aDogOTEuNjY2NjY2NjY2NyU7XG4gICAgbWluLXdpZHRoOiA5MS42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLS14eGwtMTIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgfVxuICAuY29sLS14eGwtYXV0byB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgbWluLXdpZHRoOiAwO1xuICB9XG59XG4uY29sLS1leHBhbmQge1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXgtcG9zaXRpdmU6IDE7XG4gICAgICAgICAgZmxleC1ncm93OiAxO1xufVxuLmNvbC0tbW9iaWxlLWV4cGFuZCB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcbiAgICAgICAgICBmbGV4LWdyb3c6IDE7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jb2wtLW1vYmlsZS1leHBhbmQge1xuICAgIC13ZWJraXQtYm94LWZsZXg6IDA7XG4gICAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAwO1xuICAgICAgICAgICAgZmxleC1ncm93OiAwO1xuICB9XG59XG4uY29sLS10b3Age1xuICAtbXMtZmxleC1pdGVtLWFsaWduOiBzdGFydDtcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG4gIG1hcmdpbi1ib3R0b206IGF1dG87XG59XG4uY29sLS1ib3R0b20ge1xuICAtbXMtZmxleC1pdGVtLWFsaWduOiBlbmQ7XG4gICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDtcbiAgbWFyZ2luLXRvcDogYXV0bztcbn1cbi5jb2wtLWxlZnQge1xuICBqdXN0aWZ5LXNlbGY6IGZsZXgtc3RhcnQ7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbn1cbi5jb2wtLXJpZ2h0IHtcbiAganVzdGlmeS1zZWxmOiBmbGV4LWVuZDtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG59XG4uY29sLS1jZW50ZXIge1xuICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbn1cbi5jb2wtLW1pZGRsZSB7XG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGNlbnRlcjtcbiAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgbWFyZ2luLXRvcDogYXV0bztcbiAgbWFyZ2luLWJvdHRvbTogYXV0bztcbn1cbi5jb2wtLWVxdWFsIHtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xuICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDA7XG4gICAgICBmbGV4LWJhc2lzOiAwO1xufVxuLmNvbC0tYm90dG9tLWluZGVudCB7XG4gIHBhZGRpbmctYm90dG9tOiA5cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jb2wtLWJvdHRvbS1pbmRlbnQge1xuICAgIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICB9XG59XG5cbi5ncmlkIHtcbiAgY2xlYXI6IGJvdGg7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAgICAgICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIC13ZWJraXQtYm94LWFsaWduOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG59XG4uZ3JpZDo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgY2xlYXI6IGJvdGg7XG59XG4uZ3JpZC0tcm93IHtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWZsb3c6IHJvdztcbiAgICAgICAgICBmbGV4LWZsb3c6IHJvdztcbn1cbi5ncmlkLS13aWRlIHtcbiAgd2lkdGg6IDEwMCU7XG59XG4uZ3JpZC0taC1mdWxsIHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLmdyaWQtLXRvcCB7XG4gIC13ZWJraXQtYm94LWFsaWduOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbn1cbi5ncmlkLS1ib3R0b20ge1xuICAtd2Via2l0LWJveC1hbGlnbjogZW5kO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGVuZDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG59XG4uZ3JpZC0tbGVmdCB7XG4gIC13ZWJraXQtYm94LXBhY2s6IHN0YXJ0O1xuICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuLmdyaWQtLXJpZ2h0IHtcbiAgLXdlYmtpdC1ib3gtcGFjazogZW5kO1xuICAgICAgLW1zLWZsZXgtcGFjazogZW5kO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG59XG4uZ3JpZC0tY2VudGVyIHtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuLmdyaWQtLW1pZGRsZSB7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4uZ3JpZC0tc3RyZXRjaCB7XG4gIC13ZWJraXQtYm94LWFsaWduOiBzdHJldGNoO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IHN0cmV0Y2g7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG59XG4uZ3JpZC0tc3RyZXRjaCA+IC5jb2wge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLmdyaWQtLWdhcCB7XG4gIG1hcmdpbi1sZWZ0OiAtOXB4O1xuICBtYXJnaW4tcmlnaHQ6IC05cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5ncmlkLS1nYXAge1xuICAgIG1hcmdpbi1sZWZ0OiAtMTVweDtcbiAgICBtYXJnaW4tcmlnaHQ6IC0xNXB4O1xuICB9XG59XG4uZ3JpZC0tZ2FwID4gLmNvbCB7XG4gIHBhZGRpbmctbGVmdDogOXB4O1xuICBwYWRkaW5nLXJpZ2h0OiA5cHg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5ncmlkLS1nYXAgPiAuY29sIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDE1cHg7XG4gICAgcGFkZGluZy1yaWdodDogMTVweDtcbiAgfVxufVxuLmdyaWQtLWdhcC1zbWFsbGVyIHtcbiAgbWFyZ2luLWxlZnQ6IC0wLjMzMzMzMzMzMzNyZW07XG4gIG1hcmdpbi1yaWdodDogLTAuMzMzMzMzMzMzM3JlbTtcbn1cbi5ncmlkLS1nYXAtc21hbGxlciA+IC5jb2wge1xuICBwYWRkaW5nLWxlZnQ6IDAuMzMzMzMzMzMzM3JlbTtcbiAgcGFkZGluZy1yaWdodDogMC4zMzMzMzMzMzMzcmVtO1xufVxuLmdyaWQtLWp1c3RpZnktY29sdW1uIHtcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuLmdyaWQtLWp1c3RpZnktY29sdW1uID4gLmNvbCB7XG4gIG1hcmdpbi10b3A6IGF1dG87XG4gIG1hcmdpbi1ib3R0b206IGF1dG87XG59XG4uZ3JpZC0tanVzdGlmeS1jb2x1bW4gPiAuY29sOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5ncmlkLS1qdXN0aWZ5LWNvbHVtbiA+IC5jb2w6bGFzdC1vZi10eXBlIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5ncmlkLS1qdXN0aWZ5IHtcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuLmdyaWQtLWp1c3RpZnkgPiAuY29sIHtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbn1cbi5ncmlkLS1qdXN0aWZ5ID4gLmNvbDpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmdyaWQtLWp1c3RpZnkgPiAuY29sOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG59XG4uZ3JpZC0tbm93cmFwIHtcbiAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgZmxleC13cmFwOiBub3dyYXA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5ncmlkLS1ub3dyYXAtbGctb25seSB7XG4gICAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgfVxufVxuLmdyaWQtLWNvbHVtbiB7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cbi5ncmlkLS1jb2x1bW4tbW9iLXJldmVyc2Uge1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IHJldmVyc2U7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmdyaWQtLWNvbHVtbi1tb2ItcmV2ZXJzZSB7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwMjNweCkge1xuICAuZ3JpZC0tY29sdW1uLW1vYi1yZXZlcnNlLW9ubHkteGwge1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gICAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiByZXZlcnNlO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICB9XG59XG4uZ3JpZC0taW5saW5lIHtcbiAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtYm94O1xuICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xufVxuLmdyaWQuY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAxMjAwcHg7XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyBzcGluLXRvIHtcbiAgZnJvbSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIHRvIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgc3Bpbi10byB7XG4gIGZyb20ge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuICB0byB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxufVxuQC13ZWJraXQta2V5ZnJhbWVzIHB1bHNlLWhpZ2hsaWdodCB7XG4gIDAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG4gIDUwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEuMik7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMik7XG4gIH1cbiAgMTAwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxufVxuQGtleWZyYW1lcyBwdWxzZS1oaWdobGlnaHQge1xuICAwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxuICA1MCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xuICB9XG4gIDEwMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cbi5mbGV4IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xufVxuXG4uZmxleC1pbmxpbmUge1xuICBkaXNwbGF5OiAtd2Via2l0LWlubGluZS1ib3g7XG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG59XG5cbi5mbGV4LXJvdyB7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xufVxuXG4uZmxleC1yb3ctcmV2ZXJzZSB7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiByZXZlcnNlO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG59XG5cbi5mbGV4LWNvbCB7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cblxuLmZsZXgtY29sLXJldmVyc2Uge1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IHJldmVyc2U7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbn1cblxuLmZsZXgtd3JhcCB7XG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG59XG5cbi5mbGV4LW5vLXdyYXAge1xuICAtbXMtZmxleC13cmFwOiBub3dyYXA7XG4gICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbn1cblxuLmZsZXgtd3JhcC1yZXZlcnNlIHtcbiAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlO1xuICAgICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7XG59XG5cbi5pdGVtcy1zdHJldGNoIHtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IHN0cmV0Y2g7XG4gICAgICAtbXMtZmxleC1hbGlnbjogc3RyZXRjaDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbn1cblxuLml0ZW1zLXN0YXJ0IHtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IHN0YXJ0O1xuICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xufVxuXG4uaXRlbXMtY2VudGVyIHtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLml0ZW1zLWVuZCB7XG4gIC13ZWJraXQtYm94LWFsaWduOiBlbmQ7XG4gICAgICAtbXMtZmxleC1hbGlnbjogZW5kO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbn1cblxuLml0ZW1zLWJhc2VsaW5lIHtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGJhc2VsaW5lO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbn1cblxuLmNvbnRlbnQtc3RhcnQge1xuICAtbXMtZmxleC1saW5lLXBhY2s6IHN0YXJ0O1xuICAgICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDtcbn1cblxuLmNvbnRlbnQtY2VudGVyIHtcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBjZW50ZXI7XG4gICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5jb250ZW50LWVuZCB7XG4gIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kO1xuICAgICAgYWxpZ24tY29udGVudDogZmxleC1lbmQ7XG59XG5cbi5jb250ZW50LWJldHdlZW4ge1xuICAtbXMtZmxleC1saW5lLXBhY2s6IGp1c3RpZnk7XG4gICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuXG4uY29udGVudC1hcm91bmQge1xuICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGU7XG4gICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG59XG5cbi5zZWxmLWF1dG8ge1xuICAtbXMtZmxleC1pdGVtLWFsaWduOiBhdXRvO1xuICAgICAgYWxpZ24tc2VsZjogYXV0bztcbn1cblxuLnNlbGYtc3RhcnQge1xuICAtbXMtZmxleC1pdGVtLWFsaWduOiBzdGFydDtcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG59XG5cbi5zZWxmLWNlbnRlciB7XG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGNlbnRlcjtcbiAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbn1cblxuLnNlbGYtZW5kIHtcbiAgLW1zLWZsZXgtaXRlbS1hbGlnbjogZW5kO1xuICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7XG59XG5cbi5zZWxmLXN0cmV0Y2gge1xuICAtbXMtZmxleC1pdGVtLWFsaWduOiBzdHJldGNoO1xuICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbn1cblxuLmp1c3RpZnktc3RhcnQge1xuICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbn1cblxuLmp1c3RpZnktY2VudGVyIHtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4uanVzdGlmeS1lbmQge1xuICAtd2Via2l0LWJveC1wYWNrOiBlbmQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbn1cblxuLmp1c3RpZnktYmV0d2VlbiB7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cblxuLmp1c3RpZnktYXJvdW5kIHtcbiAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZTtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xufVxuXG4uZmxleC1pbml0aWFsIHtcbiAgLXdlYmtpdC1ib3gtZmxleDogaW5pdGlhbDtcbiAgICAgIC1tcy1mbGV4OiBpbml0aWFsO1xuICAgICAgICAgIGZsZXg6IGluaXRpYWw7XG59XG5cbi5mbGV4LTEge1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXg6IDE7XG4gICAgICAgICAgZmxleDogMTtcbn1cblxuLmZsZXgtYXV0byB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleDogYXV0bztcbiAgICAgICAgICBmbGV4OiBhdXRvO1xufVxuXG4uZmxleC1ub25lIHtcbiAgLXdlYmtpdC1ib3gtZmxleDogMDtcbiAgICAgIC1tcy1mbGV4OiBub25lO1xuICAgICAgICAgIGZsZXg6IG5vbmU7XG59XG5cbi5mbGV4LWdyb3cge1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXgtcG9zaXRpdmU6IDE7XG4gICAgICAgICAgZmxleC1ncm93OiAxO1xufVxuXG4uZmxleC1uby1ncm93IHtcbiAgLXdlYmtpdC1ib3gtZmxleDogMDtcbiAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAwO1xuICAgICAgICAgIGZsZXgtZ3JvdzogMDtcbn1cblxuLmZsZXgtc2hyaW5rIHtcbiAgLW1zLWZsZXgtbmVnYXRpdmU6IDE7XG4gICAgICBmbGV4LXNocmluazogMTtcbn1cblxuLmZsZXgtbm8tc2hyaW5rIHtcbiAgLXdlYmtpdC1ib3gtZmxleDogMDtcbiAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAwO1xuICAgICAgICAgIGZsZXgtZ3JvdzogMDtcbn1cblxuLnctZnVsbCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uaC1mdWxsIHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4udi1jbG9hay0tYmxvY2ssIC52LWNsb2FrLS1pbmxpbmUsIC52LWNsb2FrLS1pbmxpbmVCbG9jayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuW3YtY2xvYWtdIC52LWNsb2FrLS1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG59XG5cblt2LWNsb2FrXSAudi1jbG9hay0taW5saW5lIHtcbiAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG59XG5cblt2LWNsb2FrXSAudi1jbG9hay0taW5saW5lQmxvY2sge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcbn1cblxuW3YtY2xvYWtdIC52LWNsb2FrLS1oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cblt2LWNsb2FrXSAudi1jbG9hay0taW52aXNpYmxlIHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7XG59XG5cbi5vdmVyZmxvdy13cmFwLWJyZWFrLXdvcmQge1xuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xufVxuXG4ub3ZlcmZsb3ctaGlkZGVuIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAwKSB7XG4gIC5vdmVyZmxvdy1oaWRkZW4tc20ge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAwKSB7XG4gIC5vdmVyZmxvdy11bnNldC1zbSB7XG4gICAgb3ZlcmZsb3c6IHVuc2V0O1xuICB9XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMCkge1xuICAub3ZlcmZsb3ctaGlkZGVuLXNwIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMCkge1xuICAub3ZlcmZsb3ctdW5zZXQtc3Age1xuICAgIG92ZXJmbG93OiB1bnNldDtcbiAgfVxufVxuXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5vdmVyZmxvdy1oaWRkZW4tbWQge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAub3ZlcmZsb3ctdW5zZXQtbWQge1xuICAgIG92ZXJmbG93OiB1bnNldDtcbiAgfVxufVxuXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5vdmVyZmxvdy1oaWRkZW4tbGcge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAub3ZlcmZsb3ctdW5zZXQtbGcge1xuICAgIG92ZXJmbG93OiB1bnNldDtcbiAgfVxufVxuXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAub3ZlcmZsb3ctaGlkZGVuLXhsIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5vdmVyZmxvdy11bnNldC14bCB7XG4gICAgb3ZlcmZsb3c6IHVuc2V0O1xuICB9XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gIC5vdmVyZmxvdy1oaWRkZW4teHhsIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gIC5vdmVyZmxvdy11bnNldC14eGwge1xuICAgIG92ZXJmbG93OiB1bnNldDtcbiAgfVxufVxuXG4uY2VsbC1maXR3aWR0aCB7XG4gIHdpZHRoOiAwLjA2NjY2NjY2NjdyZW07XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbnByZSB7XG4gIGZvbnQtZmFtaWx5OiBcIkNvbnNvbGFzXCIsIFwiQW5kYWxlIE1vbm8gV1RcIiwgXCJBbmRhbGUgTW9ub1wiLCBcIkx1Y2lkYSBDb25zb2xlXCIsIFwiTHVjaWRhIFNhbnMgVHlwZXdyaXRlclwiLCBcIkRlamFWdSBTYW5zIE1vbm9cIiwgXCJCaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm9cIiwgXCJMaWJlcmF0aW9uIE1vbm9cIiwgXCJOaW1idXMgTW9ubyBMXCIsIFwiTW9uYWNvXCIsIFwiQ291cmllciBOZXdcIiwgXCJDb3VyaWVyXCIsIG1vbm9zcGFjZTtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBwYWRkaW5nOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMS4zO1xuICB3aWR0aDogMTAwJTtcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICBvdmVyZmxvdy14OiBhdXRvO1xuICAtbW96LXRhYi1zaXplOiAyO1xuICAgIC1vLXRhYi1zaXplOiAyO1xuICAgICAgIHRhYi1zaXplOiAyO1xuICBib3JkZXItbGVmdDogMTJweCBzb2xpZCAjMzMzO1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uc29ydF9fY29sOm5vdCg6bGFzdC1jaGlsZCkge1xuICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5zdWdnZXN0aW9uLXByb2R1Y3Qge1xuICBwYWRkaW5nLWJvdHRvbTogMC42NjY2NjY2NjY3cmVtO1xufVxuLnN1Z2dlc3Rpb24tcHJvZHVjdF9fdGl0bGUge1xuICBmb250LXNpemU6IDEuMTMzMzMzMzMzM3JlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDEzMzMzMzMzM3JlbTtcbiAgcGFkZGluZy1ib3R0b206IDEuMDY2NjY2NjY2N3JlbTtcbiAgcGFkZGluZy10b3A6IDEuNzMzMzMzMzMzM3JlbTtcbiAgY29sb3I6ICM5MjkyOTI7XG59XG4uc3VnZ2VzdGlvbi1wcm9kdWN0X19saW5rIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjb2xvcjogIzkyOTI5MjtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG59XG4uc3VnZ2VzdGlvbi1wcm9kdWN0X19saW5rOmhvdmVyIHtcbiAgY29sb3I6ICNiMmIyYjI7XG59XG4uc3VnZ2VzdGlvbi1wcm9kdWN0X190aHVtYm5haWwge1xuICBtaW4td2lkdGg6IDMuNDY2NjY2NjY2N3JlbTtcbiAgd2lkdGg6IDMuNDY2NjY2NjY2N3JlbTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnN1Z2dlc3Rpb24tcHJvZHVjdF9fdGh1bWJuYWlsIHtcbiAgICBtaW4td2lkdGg6IDIuOHJlbTtcbiAgICB3aWR0aDogMi44cmVtO1xuICB9XG59XG4uc3VnZ2VzdGlvbi1wcm9kdWN0X190aHVtYm5haWw6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI2LCAyMywgMjcsIDAuMDUpO1xuICB6LWluZGV4OiAxO1xufVxuLnN1Z2dlc3Rpb24tcHJvZHVjdF9fdGh1bWJuYWlsIC50aHVtYm5haWxfX2ltYWdlIHtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IDUwJTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgYm90dG9tOiBhdXRvO1xuICByaWdodDogYXV0bztcbn1cbi5zdWdnZXN0aW9uLXByb2R1Y3RfX25hbWUge1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXgtcG9zaXRpdmU6IDE7XG4gICAgICAgICAgZmxleC1ncm93OiAxO1xuICBwYWRkaW5nLWxlZnQ6IDAuOTMzMzMzMzMzM3JlbTtcbiAgZm9udC1zaXplOiAwLjhyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGxpbmUtaGVpZ2h0OiAwLjkzMzMzMzMzMzNyZW07XG4gIGxldHRlci1zcGFjaW5nOiAwLjAwNjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zdWdnZXN0aW9uLXByb2R1Y3RfX25hbWUge1xuICAgIGZvbnQtc2l6ZTogMC44NjY2NjY2NjY3cmVtO1xuICB9XG59XG4uc3VnZ2VzdGlvbi1wcm9kdWN0X19wcmljZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nLXRvcDogM3B4O1xufVxuLnN1Z2dlc3Rpb24tcHJvZHVjdF9fcHJpY2UgLnByaWNlX19hbW91bnQge1xuICBjb2xvcjogI2IyYjJiMjtcbiAgZm9udC1zaXplOiAwLjg2NjY2NjY2NjdyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG4uc3VnZ2VzdGlvbi1wcm9kdWN0X19wcmljZSAucHJpY2VfX2Ftb3VudC0tYWx0IHtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4uc3VnZ2VzdGlvbi1wcm9kdWN0X19wcmljZSAucHJpY2VfX2Ftb3VudC0tb3JpZ2luYWwge1xuICBmb250LXNpemU6IDAuODY2NjY2NjY2N3JlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG59XG4uc3VnZ2VzdGlvbi1wcm9kdWN0X19wcmljZSAucHJpY2VfX21vZGUge1xuICBkaXNwbGF5OiBub25lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc3VnZ2VzdGlvbi1wcm9kdWN0X19wcmljZSAucHJpY2VfX21vZGUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5wcm9kdWN0LWNhcm91c2VsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uYmFkZ2Uge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAwLjFyZW0gMC41cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyMzkuNzQ0MDk0NDg4MiwgMTc3LjUpO1xuICBjb2xvcjogcmdiKDIwMywgMTYzLjAzOTM3MDA3ODcsIDApO1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBmb250LXNpemU6IDAuNzMzMzMzMzMzM3JlbTtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDI2NjY2NjY2N3JlbTtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7XG59XG4uYmFkZ2UtLWhvbGxvdyB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkYWRhZGE7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGNvbG9yOiAjMWExNzFiO1xufVxuLmJhZGdlLS1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDY5Ljc4NjIwNjg5NjYsIDI1My43MTM3OTMxMDM0LCAxNDEuODEzNzkzMTAzNCk7XG4gIGNvbG9yOiByZ2IoMC42NDgyNzU4NjIxLCA5My4zNTE3MjQxMzc5LCAzNi45NTE3MjQxMzc5KTtcbn1cbi5iYWRnZS0tc3VjY2Vzcy1saWdodCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBjb2xvcjogcmdiKDE0NC41NTU1NTU1NTU2LCAxOTQuNTE4NTE4NTE4NSwgMTAyLjQ4MTQ4MTQ4MTUpO1xufVxuLmJhZGdlLS13YXJuaW5nIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI0OS44NSwgMjMyLjgzMjYwODY5NTcsIDIwOC42NSk7XG4gIGNvbG9yOiByZ2IoMjA2LjEsIDEzMC40MzA0MzQ3ODI2LCAyMi45KTtcbn1cbi5iYWRnZS0tYWxlcnQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjQ4LjM5NjM0MTQ2MzQsIDE4MS4zMTcwNzMxNzA3LCAxNzYuMTAzNjU4NTM2Nik7XG4gIGNvbG9yOiByZ2IoMTc5LjkzOTAyNDM5MDIsIDI2Ljk1MTIxOTUxMjIsIDE1LjA2MDk3NTYwOTgpO1xufVxuLmJhZGdlLS1pbmZvIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjM5Ljc0NDA5NDQ4ODIsIDE3Ny41KTtcbiAgY29sb3I6IHJnYigyMDMsIDE2My4wMzkzNzAwNzg3LCAwKTtcbn1cbi5iYWRnZS0tbmV1dHJhbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYigyMzUuMjUsIDIzNS4yNSwgMjM1LjI1KTtcbiAgY29sb3I6IHJnYigxMjAuNSwgMTIwLjUsIDEyMC41KTtcbn1cbi5iYWRnZS0tc2hvcHBpbmctbGlzdCwgLmJhZGdlLS1tdWx0aS1jYXJ0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBjb2xvcjogIzkyOTI5MjtcbiAgcGFkZGluZzogMC4yNjY2NjY2NjY3cmVtIDAuMzMzMzMzMzMzM3JlbTtcbiAgbWFyZ2luLXJpZ2h0OiAwLjZyZW07XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIG1pbi13aWR0aDogMy40NjY2NjY2NjY3cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuYmFkZ2UtLXNob3BwaW5nLWxpc3QsIC5iYWRnZS0tbXVsdGktY2FydCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwLjZyZW07XG4gICAgcGFkZGluZy1yaWdodDogMC42cmVtO1xuICAgIG1pbi13aWR0aDogNC4yNjY2NjY2NjY3cmVtO1xuICB9XG59XG4uYmFkZ2UtLXRpdGxlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IyYjJiMjtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cbi5iYWRnZS0tYWNjZXNzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWNjMDA7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG59XG4uYmFkZ2UtLXN1bW1hcnkge1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBsZXR0ZXItc3BhY2luZzogMC4wMTMzMzMzMzMzcmVtO1xuICBwYWRkaW5nOiAwLjMzMzMzMzMzMzNyZW0gMC41MzMzMzMzMzMzcmVtO1xufVxuLmJhZGdlLS1jb3VudGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMDgsIDIwOCwgMjA4LCAwLjMpO1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBmb250LXNpemU6IDAuNzMzMzMzMzMzM3JlbTtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgY29sb3I6ICNiMmIyYjI7XG4gIHBhZGRpbmc6IDAuMzMzMzMzMzMzM3JlbSAwLjUzMzMzMzMzMzNyZW07XG59XG4uYmFkZ2UtLW9yZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRiNGI0ZDtcbiAgY29sb3I6ICMwMDA7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xuICBsZXR0ZXItc3BhY2luZzogMC4wMXJlbTtcbiAgcGFkZGluZzogMC4xMzMzMzMzMzMzcmVtIDAuNjY2NjY2NjY2N3JlbTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmJveCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxYTE3MWI7XG4gIGJvcmRlcjogMCBub25lO1xuICBwYWRkaW5nOiAxLjhyZW0gMS4zMzMzMzMzMzMzcmVtIDJyZW07XG4gIG1hcmdpbjogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmJveCB7XG4gICAgcGFkZGluZzogMi4xMzMzMzMzMzMzcmVtO1xuICB9XG59XG4uYm94LS1zbWFsbCB7XG4gIHBhZGRpbmc6IDEuMDY2NjY2NjY2N3JlbSAyLjEzMzMzMzMzMzNyZW07XG59XG4uYm94LS1zbWFsbGVyIHtcbiAgcGFkZGluZzogMS4wNjY2NjY2NjY3cmVtIDEuMzMzMzMzMzMzM3JlbTtcbn1cbi5ib3gtLW1lZGl1bSB7XG4gIG1hcmdpbjogMCAtMXJlbSAxcmVtO1xuICBwYWRkaW5nOiAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuYm94LS1tZWRpdW0ge1xuICAgIG1hcmdpbjogMCAwIDJyZW07XG4gICAgcGFkZGluZzogMS44cmVtIDJyZW0gMnJlbTtcbiAgfVxufVxuLmJveC0td2hpdGUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuLmJveF9fc2VwYXJhdG9yIHtcbiAgYm9yZGVyOiBub25lO1xuICBib3JkZXItYm90dG9tOiAwLjA2NjY2NjY2NjdyZW0gc29saWQgI2VjZWNlYztcbiAgbWFyZ2luOiAxcmVtIC0xLjMzMzMzMzMzMzNyZW07XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5idXR0b24ge1xuICAtd2Via2l0LXRyYW5zaXRpb246IGNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQsIGJhY2tncm91bmQtY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQsIGJhY2tncm91bmQtY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWNjMDA7XG4gIGJvcmRlcjogc29saWQgMXB4ICNmZWNjMDA7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgbGluZS1oZWlnaHQ6IDEuMnJlbTtcbiAgcGFkZGluZzogMC44cmVtIDEuMzMzMzMzMzMzM3JlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uYnV0dG9uX19sYWJlbC1jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbi5idXR0b246aG92ZXIsIC5idXR0b246Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGI0YjRkO1xuICBib3JkZXItY29sb3I6ICM0YjRiNGQ7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4uYnV0dG9uOmhvdmVyIHN2ZywgLmJ1dHRvbjpmb2N1cyBzdmcge1xuICBmaWxsOiAjZmZmO1xufVxuLmJ1dHRvbjpob3ZlciAuYnV0dG9uX19pY29uLWxlZnQtaG92ZXIsIC5idXR0b246Zm9jdXMgLmJ1dHRvbl9faWNvbi1sZWZ0LWhvdmVyIHtcbiAgb3BhY2l0eTogMTtcbn1cbi5idXR0b246aG92ZXIgLmJ1dHRvbl9faWNvbi1sZWZ0LS1oYXMtaG92ZXIsIC5idXR0b246Zm9jdXMgLmJ1dHRvbl9faWNvbi1sZWZ0LS1oYXMtaG92ZXIge1xuICBvcGFjaXR5OiAwO1xufVxuLmJ1dHRvbjpob3ZlciAubG9hZGluZy1zcGlubmVyX19kb3QsIC5idXR0b246Zm9jdXMgLmxvYWRpbmctc3Bpbm5lcl9fZG90IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbi5idXR0b25fX2ljb24tbGVmdC1ob3ZlciB7XG4gIG9wYWNpdHk6IDA7XG59XG4uYnV0dG9uX19pY29uLXJpZ2h0IHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIGVhc2UtaW4tb3V0LCAtd2Via2l0LXRyYW5zZm9ybSAyNTBtcyBlYXNlLWluLW91dDtcbiAgbWFyZ2luLWxlZnQ6IDAuNXJlbTtcbn1cbi5idXR0b25fX2ljb24tYm90dG9tLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbn1cbi5idXR0b25fX2ljb24tbGVmdCwgLmJ1dHRvbl9faWNvbi1sZWZ0LWhvdmVyIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbn1cbi5idXR0b25fX2ljb24tYm90dG9tLmljb24tLWlzLXNwcml0ZSwgLmJ1dHRvbl9faWNvbi1yaWdodC5pY29uLS1pcy1zcHJpdGUsIC5idXR0b25fX2ljb24tbGVmdC5pY29uLS1pcy1zcHJpdGUsIC5idXR0b25fX2ljb24tbGVmdC1ob3Zlci5pY29uLS1pcy1zcHJpdGUge1xuICB3aWR0aDogMS4zMzMzMzMzMzMzcmVtO1xuICBoZWlnaHQ6IDEuMzMzMzMzMzMzM3JlbTtcbn1cbi5idXR0b25fX2ljb24tYm90dG9tLmljb24gc3ZnLCAuYnV0dG9uX19pY29uLXJpZ2h0Lmljb24gc3ZnLCAuYnV0dG9uX19pY29uLWxlZnQuaWNvbiBzdmcsIC5idXR0b25fX2ljb24tbGVmdC1ob3Zlci5pY29uIHN2ZyB7XG4gIHdpZHRoOiAxcmVtO1xuICBoZWlnaHQ6IDFyZW07XG59XG4uYnV0dG9uX19pY29uLWxlZnQtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMS42NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDEuMzMzMzMzMzMzM3JlbTtcbiAgZm9udC1zaXplOiAxLjY2NjY2NjY2NjdyZW07XG4gIG1hcmdpbi1yaWdodDogMC41cmVtO1xufVxuLmJ1dHRvbl9faWNvbi1sZWZ0LWNvbnRhaW5lciAuYnV0dG9uX19pY29uLWJvdHRvbS5pY29uLCAuYnV0dG9uX19pY29uLWxlZnQtY29udGFpbmVyIC5idXR0b25fX2ljb24tcmlnaHQuaWNvbiwgLmJ1dHRvbl9faWNvbi1sZWZ0LWNvbnRhaW5lciAuYnV0dG9uX19pY29uLWxlZnQuaWNvbiwgLmJ1dHRvbl9faWNvbi1sZWZ0LWNvbnRhaW5lciAuYnV0dG9uX19pY29uLWxlZnQtaG92ZXIuaWNvbiB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLmJ1dHRvbl9faWNvbi1sZWZ0LWNvbnRhaW5lciAuYnV0dG9uX19pY29uLWJvdHRvbS5pY29uIHN2ZywgLmJ1dHRvbl9faWNvbi1sZWZ0LWNvbnRhaW5lciAuYnV0dG9uX19pY29uLXJpZ2h0Lmljb24gc3ZnLCAuYnV0dG9uX19pY29uLWxlZnQtY29udGFpbmVyIC5idXR0b25fX2ljb24tbGVmdC5pY29uIHN2ZywgLmJ1dHRvbl9faWNvbi1sZWZ0LWNvbnRhaW5lciAuYnV0dG9uX19pY29uLWxlZnQtaG92ZXIuaWNvbiBzdmcge1xuICB3aWR0aDogMS42NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDEuNjY2NjY2NjY2N3JlbTtcbiAgbWFyZ2luLXRvcDogLTAuMTY2NjY2NjY2N3JlbTtcbn1cbi5idXR0b24tLWFuaW1hdGUtaWNvbi1yaWdodDpob3ZlciAuYnV0dG9uX19pY29uLXJpZ2h0LCAuYnV0dG9uLS1hbmltYXRlLWljb24tcmlnaHQ6Zm9jdXMgLmJ1dHRvbl9faWNvbi1yaWdodCB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDAuMzMzMzMzMzMzM3JlbSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDAuMzMzMzMzMzMzM3JlbSk7XG59XG4uYnV0dG9uLS1hbmltYXRlLWljb24tbGVmdDpob3ZlciAuYnV0dG9uX19pY29uLWxlZnQsIC5idXR0b24tLWFuaW1hdGUtaWNvbi1sZWZ0OmZvY3VzIC5idXR0b25fX2ljb24tbGVmdCB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyBlYXNlLWluLW91dCwgLXdlYmtpdC10cmFuc2Zvcm0gMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0wLjMzMzMzMzMzMzNyZW0pO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMC4zMzMzMzMzMzMzcmVtKTtcbn1cbi5idXR0b24tLW5vLXBhZGRpbmcge1xuICBwYWRkaW5nOiAwO1xufVxuLmJ1dHRvbi0tbGluaywgLmJ1dHRvbi0tbGluay1iZy1hbHQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBib3JkZXI6IDAgc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgdGV4dC10cmFuc2Zvcm06IGluaGVyaXQ7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmJ1dHRvbi0tbGluayAuYnV0dG9uX19pY29uLXJpZ2h0LCAuYnV0dG9uLS1saW5rLWJnLWFsdCAuYnV0dG9uX19pY29uLXJpZ2h0IHtcbiAgbWFyZ2luLWxlZnQ6IDAuMjVyZW07XG59XG4uYnV0dG9uLS1saW5rOmhvdmVyLCAuYnV0dG9uLS1saW5rOmZvY3VzLCAuYnV0dG9uLS1saW5rLWJnLWFsdDpob3ZlciwgLmJ1dHRvbi0tbGluay1iZy1hbHQ6Zm9jdXMge1xuICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5idXR0b24tLWxpbmsgLmJ1dHRvbl9fbGFiZWwtY29udGFpbmVyLCAuYnV0dG9uLS1saW5rLWJnLWFsdCAuYnV0dG9uX19sYWJlbC1jb250YWluZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5idXR0b24tLWxpbmsgLmJ1dHRvbl9fbGFiZWwtY29udGFpbmVyOmhvdmVyLCAuYnV0dG9uLS1saW5rIC5idXR0b25fX2xhYmVsLWNvbnRhaW5lcjpmb2N1cywgLmJ1dHRvbi0tbGluay1iZy1hbHQgLmJ1dHRvbl9fbGFiZWwtY29udGFpbmVyOmhvdmVyLCAuYnV0dG9uLS1saW5rLWJnLWFsdCAuYnV0dG9uX19sYWJlbC1jb250YWluZXI6Zm9jdXMge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4uYnV0dG9uLS1saW5rIHtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4uYnV0dG9uLS1saW5rOmhvdmVyLCAuYnV0dG9uLS1saW5rOmZvY3VzIHtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG59XG4uYnV0dG9uLS1saW5rOmhvdmVyIHN2ZywgLmJ1dHRvbi0tbGluazpmb2N1cyBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmJ1dHRvbi0tbGluay5idXR0b25bZGlzYWJsZWRdLCAuYnV0dG9uLS1saW5rLS1kaXNhYmxlZC5idXR0b24tLWRpc2FibGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1jb2xvcjogdW5zZXQ7XG4gIGNvbG9yOiAjZDBkMGQwO1xufVxuLmJ1dHRvbi0tbGluay5idXR0b25bZGlzYWJsZWRdOmhvdmVyLCAuYnV0dG9uLS1saW5rLmJ1dHRvbltkaXNhYmxlZF06Zm9jdXMsIC5idXR0b24tLWxpbmstLWRpc2FibGVkLmJ1dHRvbi0tZGlzYWJsZWQ6aG92ZXIsIC5idXR0b24tLWxpbmstLWRpc2FibGVkLmJ1dHRvbi0tZGlzYWJsZWQ6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWNvbG9yOiB1bnNldDtcbn1cbi5idXR0b24tLWxpbmstYmctYWx0IHtcbiAgY29sb3I6ICNmZmY7XG59XG4uYnV0dG9uLS1saW5rLWJnLWFsdCBzdmcge1xuICBmaWxsOiAjZmZmO1xufVxuLmJ1dHRvbi0tbGluay1iZy1hbHQ6aG92ZXIsIC5idXR0b24tLWxpbmstYmctYWx0OmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0YjRiNGQ7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLmJ1dHRvbi0tbGluay1iZy1hbHQ6aG92ZXIgc3ZnLCAuYnV0dG9uLS1saW5rLWJnLWFsdDpmb2N1cyBzdmcge1xuICBmaWxsOiAjZmZmO1xufVxuLmJ1dHRvbi0tYmctYWx0OmhvdmVyLCAuYnV0dG9uLS1iZy1hbHQ6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICNmZmY7XG59XG4uYnV0dG9uLS1iZy1hbHQ6aG92ZXIgc3ZnLCAuYnV0dG9uLS1iZy1hbHQ6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogI2ZmZjtcbn1cbi5idXR0b24tLXdoaXRlLW1haW4tYm9yZGVyLXNtYWxsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2ZlY2MwMDtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIHRleHQtdHJhbnNmb3JtOiBpbml0aWFsO1xuICBwYWRkaW5nOiAwLjRyZW0gMS4zMzMzMzMzMzMzcmVtO1xuICBmb250LXNpemU6IDAuOHJlbTtcbn1cbi5idXR0b24tLXdoaXRlLW1haW4tYm9yZGVyLXNtYWxsOmhvdmVyLCAuYnV0dG9uLS13aGl0ZS1tYWluLWJvcmRlci1zbWFsbDpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWNjMDA7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNmZWNjMDA7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLmJ1dHRvbi0td2hpdGUtbWFpbi1ib3JkZXItc21hbGwuYnV0dG9uW2Rpc2FibGVkXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIG9wYWNpdHk6IDAuNTtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4uYnV0dG9uLS13aGl0ZS1tYWluLWJvcmRlci1zbWFsbC5idXR0b25bZGlzYWJsZWRdOmhvdmVyLCAuYnV0dG9uLS13aGl0ZS1tYWluLWJvcmRlci1zbWFsbC5idXR0b25bZGlzYWJsZWRdOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4uYnV0dG9uLS13aGl0ZS1tYWluLWJvcmRlci1zbWFsbC5idXR0b25bZGlzYWJsZWRdOmhvdmVyIC5sb2FkaW5nLXNwaW5uZXJfX2RvdCwgLmJ1dHRvbi0td2hpdGUtbWFpbi1ib3JkZXItc21hbGwuYnV0dG9uW2Rpc2FibGVkXTpmb2N1cyAubG9hZGluZy1zcGlubmVyX19kb3Qge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGI0YjRkO1xufVxuLmJ1dHRvbi0td2hpdGUtbWFpbi1ib3JkZXItc21hbGwgLmxvYWRpbmctc3Bpbm5lcl9fZG90IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRiNGI0ZDtcbiAgdG9wOiAtMC40NjY2NjY2NjY3cmVtO1xufVxuLmJ1dHRvbi0taG9sbG93IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2ZlY2MwMDtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4uYnV0dG9uLS1ob2xsb3ctYmctYWx0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZmY7XG59XG4uYnV0dG9uLS1ob2xsb3ctYmctYWx0IHN2ZyB7XG4gIGZpbGw6ICNmZmY7XG59XG4uYnV0dG9uLS1ob2xsb3ctYmctYWx0OmhvdmVyLCAuYnV0dG9uLS1ob2xsb3ctYmctYWx0OmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRiNGI0ZDtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4uYnV0dG9uLS1ob2xsb3ctYmctYWx0OmhvdmVyIHN2ZywgLmJ1dHRvbi0taG9sbG93LWJnLWFsdDpmb2N1cyBzdmcge1xuICBmaWxsOiAjZmZmO1xufVxuLmJ1dHRvbi0taG9sbG93LWJnLXdoaXRlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4uYnV0dG9uLS1ob2xsb3ctYmctd2hpdGUgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi5idXR0b24tLWhvbGxvdy1iZy13aGl0ZTpob3ZlciwgLmJ1dHRvbi0taG9sbG93LWJnLXdoaXRlOmZvY3VzIHtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGJvcmRlci1jb2xvcjogI2ZlY2MwMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZlY2MwMDtcbn1cbi5idXR0b24tLWhvbGxvdzpob3ZlciwgLmJ1dHRvbi0taG9sbG93OmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjZmVjYzAwO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZlY2MwMDtcbn1cbi5idXR0b24tLWhvbGxvdy1pY29uIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHBhZGRpbmc6IDAuMjVyZW0gMC41cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBib3JkZXI6IG5vbmU7XG4gIGNvbG9yOiAjZmVjYzAwO1xufVxuLmJ1dHRvbi0taG9sbG93LWljb246aG92ZXIsIC5idXR0b24tLWhvbGxvdy1pY29uOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6IHJnYigyNTUsIDIzOS43NDQwOTQ0ODgyLCAxNzcuNSk7XG59XG4uYnV0dG9uLS1ob2xsb3ctc2Vjb25kIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogI2ZmZjtcbn1cbi5idXR0b24tLWhvbGxvdy1zZWNvbmQ6aG92ZXIsIC5idXR0b24tLWhvbGxvdy1zZWNvbmQ6Zm9jdXMge1xuICBjb2xvcjogcmdiKDIyOS41LCAyMjkuNSwgMjI5LjUpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBib3JkZXItY29sb3I6IHJnYigyMjkuNSwgMjI5LjUsIDIyOS41KTtcbn1cbi5idXR0b24tLWhvbGxvdy1zZWNvbmQtd2hpdGUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXItY29sb3I6ICNmZWNjMDA7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLmJ1dHRvbi0taG9sbG93LXNlY29uZC13aGl0ZTpob3ZlciwgLmJ1dHRvbi0taG9sbG93LXNlY29uZC13aGl0ZTpmb2N1cyB7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBib3JkZXItY29sb3I6ICM0YjRiNGQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG4uYnV0dG9uLS1ob2xsb3ctYWx0ZXJuYXRpdmUge1xuICBjb2xvcjogI2IyYjJiMjtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xufVxuLmJ1dHRvbi0taG9sbG93LWFsdGVybmF0aXZlOmhvdmVyLCAuYnV0dG9uLS1ob2xsb3ctYWx0ZXJuYXRpdmU6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICNiMmIyYjI7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjJiMmIyO1xufVxuLmJ1dHRvbi0tc2Vjb25kIHtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXItY29sb3I6ICNkMGQwZDA7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICB0ZXh0LXRyYW5zZm9ybTogaW5pdGlhbDtcbiAgcGFkZGluZzogMC40cmVtIDEuMzMzMzMzMzMzM3JlbTtcbiAgZm9udC1zaXplOiAwLjhyZW07XG59XG4uYnV0dG9uLS1zZWNvbmQ6aG92ZXIsIC5idXR0b24tLXNlY29uZDpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkMGQwZDA7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBib3JkZXItY29sb3I6ICNkMGQwZDA7XG59XG4uYnV0dG9uLS1wcm9kdWN0LWF0dHJpYnV0ZXMtZmlsdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbn1cbi5idXR0b24tLXByb2R1Y3QtYXR0cmlidXRlcy1maWx0ZXIgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi5idXR0b24tLXByb2R1Y3QtYXR0cmlidXRlcy1maWx0ZXI6aG92ZXIsIC5idXR0b24tLXByb2R1Y3QtYXR0cmlidXRlcy1maWx0ZXI6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgYm9yZGVyLWNvbG9yOiAjZmVjYzAwO1xufVxuLmJ1dHRvbi0tcHJvZHVjdC1hdHRyaWJ1dGVzLWZpbHRlcjpob3ZlciBzdmcsIC5idXR0b24tLXByb2R1Y3QtYXR0cmlidXRlcy1maWx0ZXI6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi5idXR0b24tLXNtYWxsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLmJ1dHRvbi0tbWVkaXVtIHtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIHBhZGRpbmc6IDAuNjY2NjY2NjY2N3JlbSAycmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuYnV0dG9uLS1tZWRpdW0ge1xuICAgIGZvbnQtc2l6ZTogMS4wNjY2NjY2NjY3cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjMzMzMzMzMzMzNyZW07XG4gICAgcGFkZGluZzogMXJlbSAxLjhyZW07XG4gIH1cbn1cbi5idXR0b24tLWJpZyB7XG4gIGZvbnQtc2l6ZTogMS4wNjY2NjY2NjY3cmVtO1xuICBsaW5lLWhlaWdodDogMS4zMzMzMzMzMzMzcmVtO1xuICBwYWRkaW5nOiAxcmVtIDIuMTMzMzMzMzMzM3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmJ1dHRvbi0tYmlnIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDEuOHJlbTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxLjhyZW07XG4gIH1cbn1cbi5idXR0b24tLWJpZ2dlciB7XG4gIHBhZGRpbmctdG9wOiAwLjhyZW07XG4gIHBhZGRpbmctYm90dG9tOiAwLjhyZW07XG59XG4uYnV0dG9uLS1mb3JtIHtcbiAgcGFkZGluZy10b3A6IDAuOTMzMzMzMzMzM3JlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuOTMzMzMzMzMzM3JlbTtcbn1cbi5idXR0b24tLXRpZ2h0IHtcbiAgcGFkZGluZy1sZWZ0OiAxLjMzMzMzMzMzMzNyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDEuMzMzMzMzMzMzM3JlbTtcbn1cbi5idXR0b24tLW1vYmlsZS10aWdodCB7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmJ1dHRvbi0tbW9iaWxlLXRpZ2h0IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDJyZW07XG4gICAgcGFkZGluZy1yaWdodDogMnJlbTtcbiAgfVxufVxuLmJ1dHRvbi0tZXhwYW5kIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU0OXB4KSB7XG4gIC5idXR0b24tLWV4cGFuZC1zbS1vbmx5IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAuYnV0dG9uLS1leHBhbmQtc20tbGcge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG4uYnV0dG9uLS1jaGVja291dCB7XG4gIG1pbi13aWR0aDogMTMuMzMzMzMzMzMzM3JlbTtcbn1cbi5idXR0b24tLWVkaXQsIC5idXR0b24tLWJhY2sge1xuICAtd2Via2l0LXRyYW5zaXRpb246IGNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgY29sb3I6ICNkMGQwZDA7XG59XG4uYnV0dG9uLS1lZGl0OmhvdmVyLCAuYnV0dG9uLS1lZGl0OmZvY3VzLCAuYnV0dG9uLS1iYWNrOmhvdmVyLCAuYnV0dG9uLS1iYWNrOmZvY3VzIHtcbiAgY29sb3I6ICM2ZjZmNmY7XG59XG4uYnV0dG9uLS1iYWNrIHtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5idXR0b24tLWJvbGQge1xuICBmb250LXdlaWdodDogNzAwO1xufVxuLmJ1dHRvbi0tbG93ZXJjYXNlIHtcbiAgdGV4dC10cmFuc2Zvcm06IGxvd2VyY2FzZTtcbn1cbi5idXR0b25bZGlzYWJsZWRdLCAuYnV0dG9uLS1kaXNhYmxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkMGQwZDA7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbiAgY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4uYnV0dG9uW2Rpc2FibGVkXSBzdmcsIC5idXR0b24tLWRpc2FibGVkIHN2ZyB7XG4gIGZpbGw6ICNmZmY7XG59XG4uYnV0dG9uW2Rpc2FibGVkXTpob3ZlciwgLmJ1dHRvbltkaXNhYmxlZF06Zm9jdXMsIC5idXR0b24tLWRpc2FibGVkOmhvdmVyLCAuYnV0dG9uLS1kaXNhYmxlZDpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkMGQwZDA7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbn1cbi5idXR0b24tLWp1c3RpZnkge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5idXR0b24tLWFkZGl0aW9uYWwge1xuICBwYWRkaW5nOiAwLjkzMzMzMzMzMzNyZW0gMS4zMzMzMzMzMzMzcmVtO1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICBib3JkZXItY29sb3I6ICM0YjRiNGQ7XG4gIGNvbG9yOiAjNmY2ZjZmO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMC42NjY2NjY2NjY3cmVtIDEuMnJlbSAwIHJnYmEoMCwgMCwgMCwgMC4wNSksIDAgMC4ycmVtIDAuMnJlbSAwIHJnYmEoMCwgMCwgMCwgMC4wNCk7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwLjY2NjY2NjY2NjdyZW0gMS4ycmVtIDAgcmdiYSgwLCAwLCAwLCAwLjA1KSwgMCAwLjJyZW0gMC4ycmVtIDAgcmdiYSgwLCAwLCAwLCAwLjA0KTtcbiAgZm9udC1zaXplOiAxcmVtO1xufVxuLmJ1dHRvbi0tdy1hdXRvIHtcbiAgd2lkdGg6IGF1dG87XG59XG4uYnV0dG9uLS1zaG9wcGluZy1saXN0IHtcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDVyZW0pO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuYnV0dG9uLS1zaG9wcGluZy1saXN0IHtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGJvdHRvbTogMS40NjY2NjY2NjY3cmVtO1xuICAgIGxlZnQ6IDEuNDY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLmJ1dHRvbi0tY2F0ZWdvcnktbGlzdCB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5idXR0b24tLWNhdGVnb3J5LWxpc3QgLmJ1dHRvbl9fbGFiZWwtY29udGFpbmVyIHtcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC13ZWJraXQtYm94LWFsaWduOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmJ1dHRvbi0tY2F0ZWdvcnktbGlzdCAuYnV0dG9uX19pY29uLWxlZnQge1xuICBtYXJnaW4tbGVmdDogMDtcbn1cbi5idXR0b24tLWNhdGVnb3J5LWxpc3QgLmJ1dHRvbl9faWNvbi1sZWZ0LWNvbnRhaW5lciB7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xuICBsaW5lLWhlaWdodDogMS41O1xuICBtYXJnaW4tcmlnaHQ6IDA7XG4gIG1pbi13aWR0aDogMS42NjY2NjY2NjY3cmVtO1xufVxuLmJ1dHRvbi0tY2F0ZWdvcnktbGlzdCAuYnV0dG9uX19sYWJlbCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4uYnV0dG9uLS1jYXRlZ29yeS1saXN0W2Rpc2FibGVkXSwgLmJ1dHRvbi0tY2F0ZWdvcnktbGlzdC5idXR0b24tLWRpc2FibGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbi5idXR0b24tLWNhdGVnb3J5LWxpc3RbZGlzYWJsZWRdOmhvdmVyLCAuYnV0dG9uLS1jYXRlZ29yeS1saXN0W2Rpc2FibGVkXTpmb2N1cywgLmJ1dHRvbi0tY2F0ZWdvcnktbGlzdC5idXR0b24tLWRpc2FibGVkOmhvdmVyLCAuYnV0dG9uLS1jYXRlZ29yeS1saXN0LmJ1dHRvbi0tZGlzYWJsZWQ6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDBkMGQwO1xuICBib3JkZXItY29sb3I6ICNkMGQwZDA7XG59XG4uYnV0dG9uLS1mcy10aW55IHtcbiAgZm9udC1zaXplOiAwLjhyZW07XG59XG4uYnV0dG9uLS1mcy1zbWFsbCB7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xufVxuLmJ1dHRvbi0tZnMtc21hbGwgLmljb24ge1xuICBmb250LXNpemU6IDFyZW07XG59XG4uYnV0dG9uLS1mcy1tZWRpdW0ge1xuICBmb250LXNpemU6IDEuMnJlbTtcbn1cbi5idXR0b24tLWZpbHRlci1zdWJtaXQsIC5idXR0b24tLWZpbHRlci1zb3J0IHtcbiAgd2lkdGg6IDEwMCU7XG59XG4uYnV0dG9uLS1maWx0ZXItc3VibWl0IC5idXR0b25fX2xhYmVsLWNvbnRhaW5lciwgLmJ1dHRvbi0tZmlsdGVyLXNvcnQgLmJ1dHRvbl9fbGFiZWwtY29udGFpbmVyIHtcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG59XG4uYnV0dG9uLS1uby1ob3Jpem9udGFsLXBhZGRpbmcge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG59XG4uYnV0dG9uLS1oeXBoZW5hdGUge1xuICAtbXMtd29yZC1icmVhazogYnJlYWstYWxsO1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWNsYXJhdGlvbi1ibG9jay1uby1kdXBsaWNhdGUtcHJvcGVydGllcyAqL1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAtbXMtaHlwaGVuczogYXV0bztcbiAgICAgIGh5cGhlbnM6IGF1dG87XG59XG4uYnV0dG9uLS1hbGlnbi1sZWZ0IC5idXR0b25fX2xhYmVsLWNvbnRhaW5lciB7XG4gIC13ZWJraXQtYm94LXBhY2s6IHN0YXJ0O1xuICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuLmJ1dHRvbi0tZGFzaGVkLWJvcmRlciB7XG4gIGJvcmRlci1zdHlsZTogZGFzaGVkO1xufVxuLmJ1dHRvbi0tbm8tcmFkaXVzIHtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5idXR0b24tLXNlYXJjaCBzdmcge1xuICB3aWR0aDogMnJlbTtcbiAgaGVpZ2h0OiAycmVtO1xufVxuLmJ1dHRvbi0tc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMTkwMzk7XG4gIGJvcmRlci1jb2xvcjogIzAxOTAzOTtcbn1cbi5idXR0b24tLXN1Y2Nlc3M6aG92ZXIsIC5idXR0b24tLXN1Y2Nlc3M6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMC42NDgyNzU4NjIxLCA5My4zNTE3MjQxMzc5LCAzNi45NTE3MjQxMzc5KTtcbiAgYm9yZGVyLWNvbG9yOiByZ2IoMC42NDgyNzU4NjIxLCA5My4zNTE3MjQxMzc5LCAzNi45NTE3MjQxMzc5KTtcbn1cbi5idXR0b24tLXN1Y2Nlc3MuYnV0dG9uLS1ob2xsb3cge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBib3JkZXItY29sb3I6ICMwMTkwMzk7XG4gIGNvbG9yOiAjMDE5MDM5O1xufVxuLmJ1dHRvbi0tc3VjY2Vzcy5idXR0b24tLWhvbGxvdzpob3ZlciwgLmJ1dHRvbi0tc3VjY2Vzcy5idXR0b24tLWhvbGxvdzpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMTkwMzk7XG4gIGNvbG9yOiAjZmZmO1xufVxuLmJ1dHRvbi0tc3VjY2Vzcy5idXR0b24tLWhvbGxvdzpob3ZlciBzdmcsIC5idXR0b24tLXN1Y2Nlc3MuYnV0dG9uLS1ob2xsb3c6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogI2ZmZjtcbn1cbi5idXR0b24tLXNhcC1vcmRlci1kZXRhaWxzLWJhY2stYnV0dG9uIC5pY29uIHtcbiAgZm9udC1zaXplOiAxLjJyZW07XG59XG4uYnV0dG9uLS1zdWNjZXNzLWxpZ2h0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FiZDE4YjtcbiAgYm9yZGVyLWNvbG9yOiAjYWJkMThiO1xufVxuLmJ1dHRvbi0tc3VjY2Vzcy1saWdodDpob3ZlciwgLmJ1dHRvbi0tc3VjY2Vzcy1saWdodDpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYigxNDQuNTU1NTU1NTU1NiwgMTk0LjUxODUxODUxODUsIDEwMi40ODE0ODE0ODE1KTtcbiAgYm9yZGVyLWNvbG9yOiByZ2IoMTQ0LjU1NTU1NTU1NTYsIDE5NC41MTg1MTg1MTg1LCAxMDIuNDgxNDgxNDgxNSk7XG59XG4uYnV0dG9uLS1zdWNjZXNzLWxpZ2h0LmJ1dHRvbi0taG9sbG93IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgYm9yZGVyLWNvbG9yOiAjYWJkMThiO1xuICBjb2xvcjogI2FiZDE4Yjtcbn1cbi5idXR0b24tLXN1Y2Nlc3MtbGlnaHQuYnV0dG9uLS1ob2xsb3c6aG92ZXIsIC5idXR0b24tLXN1Y2Nlc3MtbGlnaHQuYnV0dG9uLS1ob2xsb3c6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWJkMThiO1xuICBjb2xvcjogI2ZmZjtcbn1cbi5idXR0b24tLXN1Y2Nlc3MtbGlnaHQuYnV0dG9uLS1ob2xsb3c6aG92ZXIgc3ZnLCAuYnV0dG9uLS1zdWNjZXNzLWxpZ2h0LmJ1dHRvbi0taG9sbG93OmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICNmZmY7XG59XG4uYnV0dG9uLS1zYXAtb3JkZXItZGV0YWlscy1iYWNrLWJ1dHRvbiAuaWNvbiB7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xufVxuLmJ1dHRvbi0td2FybmluZyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlODljMzA7XG4gIGJvcmRlci1jb2xvcjogI2U4OWMzMDtcbn1cbi5idXR0b24tLXdhcm5pbmc6aG92ZXIsIC5idXR0b24tLXdhcm5pbmc6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA2LjEsIDEzMC40MzA0MzQ3ODI2LCAyMi45KTtcbiAgYm9yZGVyLWNvbG9yOiByZ2IoMjA2LjEsIDEzMC40MzA0MzQ3ODI2LCAyMi45KTtcbn1cbi5idXR0b24tLXdhcm5pbmcuYnV0dG9uLS1ob2xsb3cge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBib3JkZXItY29sb3I6ICNlODljMzA7XG4gIGNvbG9yOiAjZTg5YzMwO1xufVxuLmJ1dHRvbi0td2FybmluZy5idXR0b24tLWhvbGxvdzpob3ZlciwgLmJ1dHRvbi0td2FybmluZy5idXR0b24tLWhvbGxvdzpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlODljMzA7XG4gIGNvbG9yOiAjZmZmO1xufVxuLmJ1dHRvbi0td2FybmluZy5idXR0b24tLWhvbGxvdzpob3ZlciBzdmcsIC5idXR0b24tLXdhcm5pbmcuYnV0dG9uLS1ob2xsb3c6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogI2ZmZjtcbn1cbi5idXR0b24tLXNhcC1vcmRlci1kZXRhaWxzLWJhY2stYnV0dG9uIC5pY29uIHtcbiAgZm9udC1zaXplOiAxLjJyZW07XG59XG4uYnV0dG9uLS1hbGVydCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlMzIyMTM7XG4gIGJvcmRlci1jb2xvcjogI2UzMjIxMztcbn1cbi5idXR0b24tLWFsZXJ0OmhvdmVyLCAuYnV0dG9uLS1hbGVydDpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYigxNzkuOTM5MDI0MzkwMiwgMjYuOTUxMjE5NTEyMiwgMTUuMDYwOTc1NjA5OCk7XG4gIGJvcmRlci1jb2xvcjogcmdiKDE3OS45MzkwMjQzOTAyLCAyNi45NTEyMTk1MTIyLCAxNS4wNjA5NzU2MDk4KTtcbn1cbi5idXR0b24tLWFsZXJ0LmJ1dHRvbi0taG9sbG93IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgYm9yZGVyLWNvbG9yOiAjZTMyMjEzO1xuICBjb2xvcjogI2UzMjIxMztcbn1cbi5idXR0b24tLWFsZXJ0LmJ1dHRvbi0taG9sbG93OmhvdmVyLCAuYnV0dG9uLS1hbGVydC5idXR0b24tLWhvbGxvdzpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlMzIyMTM7XG4gIGNvbG9yOiAjZmZmO1xufVxuLmJ1dHRvbi0tYWxlcnQuYnV0dG9uLS1ob2xsb3c6aG92ZXIgc3ZnLCAuYnV0dG9uLS1hbGVydC5idXR0b24tLWhvbGxvdzpmb2N1cyBzdmcge1xuICBmaWxsOiAjZmZmO1xufVxuLmJ1dHRvbi0tc2FwLW9yZGVyLWRldGFpbHMtYmFjay1idXR0b24gLmljb24ge1xuICBmb250LXNpemU6IDEuMnJlbTtcbn1cbi5idXR0b24tLWluZm8ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVjYzAwO1xuICBib3JkZXItY29sb3I6ICNmZWNjMDA7XG59XG4uYnV0dG9uLS1pbmZvOmhvdmVyLCAuYnV0dG9uLS1pbmZvOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwMywgMTYzLjAzOTM3MDA3ODcsIDApO1xuICBib3JkZXItY29sb3I6IHJnYigyMDMsIDE2My4wMzkzNzAwNzg3LCAwKTtcbn1cbi5idXR0b24tLWluZm8uYnV0dG9uLS1ob2xsb3cge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBib3JkZXItY29sb3I6ICNmZWNjMDA7XG4gIGNvbG9yOiAjZmVjYzAwO1xufVxuLmJ1dHRvbi0taW5mby5idXR0b24tLWhvbGxvdzpob3ZlciwgLmJ1dHRvbi0taW5mby5idXR0b24tLWhvbGxvdzpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWNjMDA7XG4gIGNvbG9yOiAjZmZmO1xufVxuLmJ1dHRvbi0taW5mby5idXR0b24tLWhvbGxvdzpob3ZlciBzdmcsIC5idXR0b24tLWluZm8uYnV0dG9uLS1ob2xsb3c6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogI2ZmZjtcbn1cbi5idXR0b24tLXNhcC1vcmRlci1kZXRhaWxzLWJhY2stYnV0dG9uIC5pY29uIHtcbiAgZm9udC1zaXplOiAxLjJyZW07XG59XG4uYnV0dG9uLS1uZXV0cmFsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzkyOTI5MjtcbiAgYm9yZGVyLWNvbG9yOiAjOTI5MjkyO1xufVxuLmJ1dHRvbi0tbmV1dHJhbDpob3ZlciwgLmJ1dHRvbi0tbmV1dHJhbDpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYigxMjAuNSwgMTIwLjUsIDEyMC41KTtcbiAgYm9yZGVyLWNvbG9yOiByZ2IoMTIwLjUsIDEyMC41LCAxMjAuNSk7XG59XG4uYnV0dG9uLS1uZXV0cmFsLmJ1dHRvbi0taG9sbG93IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgYm9yZGVyLWNvbG9yOiAjOTI5MjkyO1xuICBjb2xvcjogIzkyOTI5Mjtcbn1cbi5idXR0b24tLW5ldXRyYWwuYnV0dG9uLS1ob2xsb3c6aG92ZXIsIC5idXR0b24tLW5ldXRyYWwuYnV0dG9uLS1ob2xsb3c6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTI5MjkyO1xuICBjb2xvcjogI2ZmZjtcbn1cbi5idXR0b24tLW5ldXRyYWwuYnV0dG9uLS1ob2xsb3c6aG92ZXIgc3ZnLCAuYnV0dG9uLS1uZXV0cmFsLmJ1dHRvbi0taG9sbG93OmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICNmZmY7XG59XG4uYnV0dG9uLS1zYXAtb3JkZXItZGV0YWlscy1iYWNrLWJ1dHRvbiAuaWNvbiB7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xufVxuLmJ1dHRvbiAubG9hZGluZy1zcGlubmVyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5idXR0b24ubG9hZGluZyB7XG4gIGN1cnNvcjogd2FpdDtcbn1cbi5idXR0b24ubG9hZGluZyAubG9hZGluZy1zcGlubmVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLmJ1dHRvbi5sb2FkaW5nIC5idXR0b25fX2xhYmVsLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5jaGVja2JveCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5jaGVja2JveF9fY29udGFpbmVyIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1mbG93OiByb3cgbm93cmFwO1xuICAgICAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmNoZWNrYm94X19ib3gge1xuICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAyNTBtcyBlYXNlLWluLW91dCwgYm9yZGVyLWNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgd2lkdGg6IDEuNDY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAxLjQ2NjY2NjY2NjdyZW07XG4gIGJvcmRlcjogMC4wNjY2NjY2NjY3cmVtIHNvbGlkICNkMGQwZDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIG1hcmdpbi1yaWdodDogMC42NjY2NjY2NjY3cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IDAuMTMzMzMzMzMzM3JlbTtcbiAgLXdlYmtpdC1ib3gtZmxleDogMDtcbiAgICAgIC1tcy1mbGV4OiBub25lO1xuICAgICAgICAgIGZsZXg6IG5vbmU7XG59XG4uY2hlY2tib3hfX2JveCBzdmcge1xuICB3aWR0aDogMXJlbTtcbiAgaGVpZ2h0OiAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY2hlY2tib3hfX2JveCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwLjkzMzMzMzMzMzNyZW07XG4gICAgd2lkdGg6IDEuNDY2NjY2NjY2N3JlbTtcbiAgICBoZWlnaHQ6IDEuNDY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLmNoZWNrYm94X19ib3gtLWZpbHRlciB7XG4gIHdpZHRoOiAxLjZyZW07XG4gIGhlaWdodDogMS42cmVtO1xuICBsaW5lLWhlaWdodDogMS42cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY2hlY2tib3hfX2JveC0tZmlsdGVyIHtcbiAgICB3aWR0aDogMS4xMjVyZW07XG4gICAgaGVpZ2h0OiAxLjEyNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xMjVyZW07XG4gIH1cbn1cbi5jaGVja2JveF9fYm94LS1zaG9wcGluZy1saXN0IHtcbiAgcG9zaXRpb246IHN0YXRpYztcbiAgei1pbmRleDogMTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNoZWNrYm94X19ib3gtLXNob3BwaW5nLWxpc3Qge1xuICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgbWFyZ2luLXJpZ2h0OiAwLjY2NjY2NjY2NjdyZW07XG4gIH1cbn1cbi5jaGVja2JveF9fYm94LS1hbHRlcm5hdGl2ZSB7XG4gIGJvcmRlcjogc29saWQgMC4xMzMzMzMzMzMzcmVtICNkMGQwZDA7XG59XG4uY2hlY2tib3hfX2lucHV0IHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIG9wYWNpdHk6IDA7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICB3aWR0aDogMS40NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDEuNDY2NjY2NjY2N3JlbTtcbn1cbi5jaGVja2JveF9faW5wdXQ6Y2hlY2tlZCB+IC5jaGVja2JveF9fYm94IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLmNoZWNrYm94X19pbnB1dDpjaGVja2VkIH4gLmNoZWNrYm94X19ib3ggc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi5jaGVja2JveF9faW5wdXQ6Y2hlY2tlZCB+IC5jaGVja2JveF9fYm94IC5jaGVja2JveF9fY2hlY2sge1xuICBwb2ludGVyLWV2ZW50czogYWxsO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBvcGFjaXR5OiAxO1xufVxuLmNoZWNrYm94X19pbnB1dDpjaGVja2VkIH4gLmNoZWNrYm94X19ib3gtLWFsdGVybmF0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xufVxuLmNoZWNrYm94X19pbnB1dDpjaGVja2VkIH4gLmNoZWNrYm94X19sYWJlbCB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLmNoZWNrYm94X19pbnB1dDpjaGVja2VkIH4gLmNoZWNrYm94X19sYWJlbC0tYWx0ZXJuYXRpdmUge1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLmNoZWNrYm94X19pbnB1dDpmb2N1cyB+IC5jaGVja2JveF9fYm94IHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMCAzcHggI2ZlY2MwMDtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggI2ZlY2MwMDtcbn1cbi5jaGVja2JveF9faW5wdXRbZGlzYWJsZWRdIH4gLmNoZWNrYm94X19ib3gsIC5jaGVja2JveF9faW5wdXRbZGlzYWJsZWRdIH4gLmNoZWNrYm94X19ib3g6aG92ZXIsIC5jaGVja2JveF9faW5wdXQtLWRpc2FibGVkIH4gLmNoZWNrYm94X19ib3gsIC5jaGVja2JveF9faW5wdXQtLWRpc2FibGVkIH4gLmNoZWNrYm94X19ib3g6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXItY29sb3I6ICNlY2VjZWM7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4uY2hlY2tib3hfX2lucHV0W2Rpc2FibGVkXTpjaGVja2VkIH4gLmNoZWNrYm94X19ib3gsIC5jaGVja2JveF9faW5wdXQtLWRpc2FibGVkOmNoZWNrZWQgfiAuY2hlY2tib3hfX2JveCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7XG59XG4uY2hlY2tib3hfX2lucHV0W2Rpc2FibGVkXSB+IC5jaGVja2JveF9fbGFiZWwsIC5jaGVja2JveF9faW5wdXQtLWRpc2FibGVkIH4gLmNoZWNrYm94X19sYWJlbCB7XG4gIGNvbG9yOiAjZDBkMGQwO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLmNoZWNrYm94X19jaGVjayB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIG9wYWNpdHk6IDA7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAyNTBtcyBlYXNlLWluLW91dCwgb3BhY2l0eSAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAyNTBtcyBlYXNlLWluLW91dCwgb3BhY2l0eSAyNTBtcyBlYXNlLWluLW91dDtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgbGluZS1oZWlnaHQ6IDAuOTMzMzMzMzMzM3JlbTtcbn1cbi5jaGVja2JveF9fY2hlY2stLWFsdGVybmF0aXZlIHtcbiAgY29sb3I6ICNkMGQwZDA7XG4gIG1hcmdpbi1ib3R0b206IDAuMTMzMzMzMzMzM3JlbTtcbn1cbi5jaGVja2JveF9fbGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbWFyZ2luOiAwO1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXg6IDE7XG4gICAgICAgICAgZmxleDogMTtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XG4gICAgICBmbGV4LWJhc2lzOiBhdXRvO1xufVxuLmNoZWNrYm94X19sYWJlbC0tZmlsdGVyIHtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xuICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5jaGVja2JveF9fbGFiZWwtLWFsdGVybmF0aXZlIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBsaW5lLWhlaWdodDogMS4zMzMzMzMzMzMzcmVtO1xuICBjb2xvcjogI2QwZDBkMDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG59XG4uY2hlY2tib3hfX2NvdW50ZXIge1xuICBwYWRkaW5nLWxlZnQ6IDAuNTMzMzMzMzMzM3JlbTtcbn1cbi5jaGVja2JveC0tZXhwYW5kIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbn1cbi5jaGVja2JveC0tZmlsdGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMnJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNoZWNrYm94LS1maWx0ZXIge1xuICAgIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICB9XG59XG4uY2hlY2tib3gtLWFsdGVybmF0aXZlIHtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbn1cbi5jaGVja2JveC0tYWx0ZXJuYXRpdmU6aG92ZXIgLmNoZWNrYm94X19ib3gtLWFsdGVybmF0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY2hlY2tib3gtLXBkcCB7XG4gICAgbWFyZ2luLWxlZnQ6IDguOHJlbTtcbiAgfVxufVxuLmNoZWNrYm94LS1wZHA6aG92ZXIgLmNoZWNrYm94X19ib3gtLWFsdGVybmF0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xufVxuLmNoZWNrYm94LS1lcnJvciAuY2hlY2tib3hfX2JveCB7XG4gIGJvcmRlci1jb2xvcjogI2UzMjIxMztcbn1cbi5jaGVja2JveDpob3ZlciAuY2hlY2tib3hfX2JveCB7XG4gIGJvcmRlci1jb2xvcjogI2ZlY2MwMDtcbn1cbi5jaGVja2JveDpob3ZlciAuY2hlY2tib3hfX2lucHV0W2Rpc2FibGVkXSB+IC5jaGVja2JveF9fYm94LFxuLmNoZWNrYm94OmhvdmVyIC5jaGVja2JveF9faW5wdXQtLWRpc2FibGVkIH4gLmNoZWNrYm94X19ib3gge1xuICBib3JkZXItY29sb3I6ICNlY2VjZWM7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5jaGVja2JveC50b29sdGlwLXBvc2l0aW9uLWxlZnQtbGcgLnRvb2x0aXAtYnV0dG9uX190b29sdGlwIHtcbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICAgIC8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgfVxuICAuY2hlY2tib3gudG9vbHRpcC1wb3NpdGlvbi1sZWZ0LWxnIC50b29sdGlwLWJ1dHRvbl9fdG9vbHRpcDo6YWZ0ZXIge1xuICAgIHJpZ2h0OiA0JTtcbiAgfVxuICAuY2hlY2tib3gudG9vbHRpcC1wb3NpdGlvbi1sZWZ0LWxnIC50b29sdGlwLWJ1dHRvbl9fdG9vbHRpcC1jb250YWluZXIge1xuICAgIGxlZnQ6IGF1dG87XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IG5vbmU7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IG5vbmU7XG4gIH1cbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmljb24ge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLmljb24gc3ZnIHtcbiAgbWluLXdpZHRoOiAxMDAlO1xufVxuLmljb24tLWNhcnQgc3ZnIHtcbiAgd2lkdGg6IDEuNjY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAxLjY2NjY2NjY2NjdyZW07XG59XG4uaWNvbi0tZW5lcmd5IHN2ZyB7XG4gIHdpZHRoOiAycmVtO1xuICBoZWlnaHQ6IDJyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwMjNweCkge1xuICAuaWNvbi0tZ2FsbGVyeS1jbG9zZSB7XG4gICAgdG9wOiA3cmVtO1xuICB9XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5pbnB1dCB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogMC4yNXJlbSAwLjVyZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkMGQwZDA7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIHBhZGRpbmc6IDAuOTMzMzMzMzMzM3JlbSAxLjMzMzMzMzMzMzNyZW07XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xufVxuLmlucHV0OmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjYjJiMmIyO1xufVxuLmlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6ICMxYTE3MWI7XG59XG4uaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIge1xuICBjb2xvcjogIzFhMTcxYjtcbn1cbi5pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICBjb2xvcjogIzFhMTcxYjtcbn1cbi5pbnB1dDo6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6ICMxYTE3MWI7XG59XG4uaW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgY29sb3I6ICMxYTE3MWI7XG59XG4uaW5wdXQtLWV4cGFuZCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbn1cbi5pbnB1dC0tbmFrZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBib3JkZXI6IG5vbmU7XG59XG4uaW5wdXQtLWVycm9yIHtcbiAgYm9yZGVyLWNvbG9yOiAjZTMyMjEzO1xufVxuLmlucHV0W2Rpc2FibGVkXSwgLmlucHV0LS1kaXNhYmxlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNGY0ZjQ7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4uaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICBjb2xvcjogI2IyYjJiMjtcbn1cbi5pbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjYjJiMmIyO1xufVxuLmlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjYjJiMmIyO1xufVxuLmlucHV0OjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICBjb2xvcjogI2IyYjJiMjtcbn1cbi5pbnB1dDo6cGxhY2Vob2xkZXIge1xuICBjb2xvcjogI2IyYjJiMjtcbn1cbi5pbnB1dC0tc21hbGwge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMnJlbTtcbiAgcGFkZGluZzogMC42NjY2NjY2NjY3cmVtIDEuMDY2NjY2NjY2N3JlbTtcbn1cbi5pbnB1dC0tbWVhc3VyZW1lbnQtdW5pdCB7XG4gIG1heC13aWR0aDogOTBweDtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICAgICAgYXBwZWFyYW5jZTogbm9uZTtcbn1cbi5pbnB1dC0tbWVhc3VyZW1lbnQtdW5pdDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiwgLmlucHV0LS1tZWFzdXJlbWVudC11bml0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gIG1hcmdpbjogMDtcbn1cbi5pbnB1dC0tZmlsdGVyLXJhbmdlIHtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICM5MjkyOTI7XG4gIHBhZGRpbmctcmlnaHQ6IDAuOHJlbTtcbiAgcGFkZGluZy1sZWZ0OiAwLjUzMzMzMzMzMzNyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5pbnB1dC0tZmlsdGVyLXJhbmdlIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDEuMDY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLmlucHV0LS1maWxlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5pbnB1dC0tZmlsZSB+IC5idXR0b24ge1xuICBtYXJnaW4tcmlnaHQ6IDFyZW07XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4uaW5wdXQtLWZpbGUgfiAuZmlsZS11cGxvYWRfX3BhdGgge1xuICAtbXMtZmxleC1pdGVtLWFsaWduOiBjZW50ZXI7XG4gICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5sYWJlbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGNvbG9yOiAjNmY2ZjZmO1xufVxuLmxhYmVsLS1yZXF1aXJlZDo6YWZ0ZXIge1xuICBjb250ZW50OiBcIipcIjtcbiAgbWFyZ2luLWxlZnQ6IDAuMnJlbTtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4ubGFiZWwtLXRpdGxlOjphZnRlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubGFiZWwtLWJyb3dzZS1maWxlIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogOHJlbTtcbiAgcGFkZGluZzogMC42NjY2NjY2NjY3cmVtO1xuICBib3JkZXI6IDAuMTMzMzMzMzMzM3JlbSBkYXNoZWQgI2QwZDBkMDtcbiAgYm9yZGVyLXJhZGl1czogMC4xMzMzMzMzMzMzcmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjb2xvcjogI2IyYjJiMjtcbiAgdGV4dC10cmFuc2Zvcm06IGluaXRpYWw7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5sYWJlbC0tYnJvd3NlLWZpbGU6aG92ZXIge1xuICBib3JkZXItY29sb3I6ICNmZWNjMDA7XG59XG4ubGFiZWwtLWJyb3dzZS1maWxlLWN1cnNvci1kZWZhdWx0IHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuLmxhYmVsLS1jb2xvci10ZXh0IHtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4ubGFiZWwtLWNvbG9yLXRleHQgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi5sYWJlbC0tY29sb3Itd2hpdGUge1xuICBjb2xvcjogI2ZmZjtcbn1cbi5sYWJlbC0tY29sb3Itd2hpdGUgc3ZnIHtcbiAgZmlsbDogI2ZmZjtcbn1cbi5sYWJlbC0tY29sb3ItbWFpbiB7XG4gIGNvbG9yOiAjZmVjYzAwO1xufVxuLmxhYmVsLS1jb2xvci1tYWluIHN2ZyB7XG4gIGZpbGw6ICNmZWNjMDA7XG59XG4ubGFiZWwtLWNvbG9yLWFsdCB7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLmxhYmVsLS1jb2xvci1hbHQgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi5sYWJlbC0tY29sb3ItZGFyayB7XG4gIGNvbG9yOiAjMWExNzFiO1xufVxuLmxhYmVsLS1jb2xvci1kYXJrIHN2ZyB7XG4gIGZpbGw6ICMxYTE3MWI7XG59XG4ubGFiZWwtLWNvbG9yLWJsYWNrIHtcbiAgY29sb3I6ICMwMDA7XG59XG4ubGFiZWwtLWNvbG9yLWJsYWNrIHN2ZyB7XG4gIGZpbGw6ICMwMDA7XG59XG4ubGFiZWwtLWNvbG9yLXRyYW5zcGFyZW50IHtcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG59XG4ubGFiZWwtLWNvbG9yLXRyYW5zcGFyZW50IHN2ZyB7XG4gIGZpbGw6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG59XG4ubGFiZWwtLWNvbG9yLW92ZXJsYXkge1xuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpO1xufVxuLmxhYmVsLS1jb2xvci1vdmVybGF5IHN2ZyB7XG4gIGZpbGw6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbn1cbi5sYWJlbC0tY29sb3ItY29udHJvbHMtb3ZlcmxheSB7XG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7XG59XG4ubGFiZWwtLWNvbG9yLWNvbnRyb2xzLW92ZXJsYXkgc3ZnIHtcbiAgZmlsbDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpO1xufVxuLmxhYmVsLS1jb2xvci1ncmF5LTEge1xuICBjb2xvcjogI2VjZWNlYztcbn1cbi5sYWJlbC0tY29sb3ItZ3JheS0xIHN2ZyB7XG4gIGZpbGw6ICNlY2VjZWM7XG59XG4ubGFiZWwtLWNvbG9yLWdyYXktMiB7XG4gIGNvbG9yOiAjZDBkMGQwO1xufVxuLmxhYmVsLS1jb2xvci1ncmF5LTIgc3ZnIHtcbiAgZmlsbDogI2QwZDBkMDtcbn1cbi5sYWJlbC0tY29sb3ItZ3JheS0zIHtcbiAgY29sb3I6ICNiMmIyYjI7XG59XG4ubGFiZWwtLWNvbG9yLWdyYXktMyBzdmcge1xuICBmaWxsOiAjYjJiMmIyO1xufVxuLmxhYmVsLS1jb2xvci1ncmF5LTQge1xuICBjb2xvcjogIzkyOTI5Mjtcbn1cbi5sYWJlbC0tY29sb3ItZ3JheS00IHN2ZyB7XG4gIGZpbGw6ICM5MjkyOTI7XG59XG4ubGFiZWwtLWNvbG9yLWdyYXktNSB7XG4gIGNvbG9yOiAjNmY2ZjZmO1xufVxuLmxhYmVsLS1jb2xvci1ncmF5LTUgc3ZnIHtcbiAgZmlsbDogIzZmNmY2Zjtcbn1cbi5sYWJlbC0tY29sb3ItZ3JheS02IHtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4ubGFiZWwtLWNvbG9yLWdyYXktNiBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmxhYmVsLS1jb2xvci1ncmF5LTcge1xuICBjb2xvcjogIzFhMTcxYjtcbn1cbi5sYWJlbC0tY29sb3ItZ3JheS03IHN2ZyB7XG4gIGZpbGw6ICMxYTE3MWI7XG59XG4ubGFiZWwtLWNvbG9yLXJlZC0xIHtcbiAgY29sb3I6ICNlMzIyMTM7XG59XG4ubGFiZWwtLWNvbG9yLXJlZC0xIHN2ZyB7XG4gIGZpbGw6ICNlMzIyMTM7XG59XG4ubGFiZWwtLWNvbG9yLXJlZC0yIHtcbiAgY29sb3I6ICNlMTMwNmM7XG59XG4ubGFiZWwtLWNvbG9yLXJlZC0yIHN2ZyB7XG4gIGZpbGw6ICNlMTMwNmM7XG59XG4ubGFiZWwtLWNvbG9yLXJlZC0zIHtcbiAgY29sb3I6ICNkZDFhMTY7XG59XG4ubGFiZWwtLWNvbG9yLXJlZC0zIHN2ZyB7XG4gIGZpbGw6ICNkZDFhMTY7XG59XG4ubGFiZWwtLWNvbG9yLWZhY2Vib29rIHtcbiAgY29sb3I6ICMzYjU5OTg7XG59XG4ubGFiZWwtLWNvbG9yLWZhY2Vib29rIHN2ZyB7XG4gIGZpbGw6ICMzYjU5OTg7XG59XG4ubGFiZWwtLWNvbG9yLXR3aXR0ZXIge1xuICBjb2xvcjogIzAwNzdiNTtcbn1cbi5sYWJlbC0tY29sb3ItdHdpdHRlciBzdmcge1xuICBmaWxsOiAjMDA3N2I1O1xufVxuLmxhYmVsLS1jb2xvci1lZWstYSB7XG4gIGNvbG9yOiAjYWZjNzBkO1xufVxuLmxhYmVsLS1jb2xvci1lZWstYSBzdmcge1xuICBmaWxsOiAjYWZjNzBkO1xufVxuLmxhYmVsLS1jb2xvci1lZWstYTEge1xuICBjb2xvcjogIzU4YWIzMjtcbn1cbi5sYWJlbC0tY29sb3ItZWVrLWExIHN2ZyB7XG4gIGZpbGw6ICM1OGFiMzI7XG59XG4ubGFiZWwtLWNvbG9yLWVlay1hMiB7XG4gIGNvbG9yOiAjMDE5MDM5O1xufVxuLmxhYmVsLS1jb2xvci1lZWstYTIgc3ZnIHtcbiAgZmlsbDogIzAxOTAzOTtcbn1cbi5sYWJlbC0tY29sb3ItZWVrLWIge1xuICBjb2xvcjogI2ZkZWExNDtcbn1cbi5sYWJlbC0tY29sb3ItZWVrLWIgc3ZnIHtcbiAgZmlsbDogI2ZkZWExNDtcbn1cbi5sYWJlbC0tY29sb3ItZWVrLWMge1xuICBjb2xvcjogI2ZkY2IwMDtcbn1cbi5sYWJlbC0tY29sb3ItZWVrLWMgc3ZnIHtcbiAgZmlsbDogI2ZkY2IwMDtcbn1cbi5sYWJlbC0tY29sb3ItZWVrLWQge1xuICBjb2xvcjogI2YxOTMwNTtcbn1cbi5sYWJlbC0tY29sb3ItZWVrLWQgc3ZnIHtcbiAgZmlsbDogI2YxOTMwNTtcbn1cbi5sYWJlbC0tY29sb3ItZWVrLWUge1xuICBjb2xvcjogI2UwMDcxYjtcbn1cbi5sYWJlbC0tY29sb3ItZWVrLWUgc3ZnIHtcbiAgZmlsbDogI2UwMDcxYjtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmxpbmsge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ubGluazpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmxpbmstLXN1Y2Nlc3Mge1xuICBjb2xvcjogIzAxOTAzOTtcbn1cbi5saW5rLS1zdWNjZXNzLWxpZ2h0IHtcbiAgY29sb3I6ICNhYmQxOGI7XG59XG4ubGluay0td2FybmluZyB7XG4gIGNvbG9yOiAjZTg5YzMwO1xufVxuLmxpbmstLWFsZXJ0IHtcbiAgY29sb3I6ICNlMzIyMTM7XG59XG4ubGluay0taW5mbyB7XG4gIGNvbG9yOiAjZmVjYzAwO1xufVxuLmxpbmstLW5ldXRyYWwge1xuICBjb2xvcjogIzkyOTI5Mjtcbn1cbi5saW5rLS1zbWFsbCB7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xufVxuLmxpbmstLWFsdCB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xufVxuLmxpbmstLWFsdDpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6IHJnYig0OS44MzU1MjYzMTU4LCA0OS44MzU1MjYzMTU4LCA1MS4xNjQ0NzM2ODQyKTtcbn1cbi5saW5rW2Rpc2FibGVkXSwgLmxpbmstLWRpc2FibGVkIHtcbiAgY29sb3I6ICMxYTE3MWI7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4ubGlua1tkaXNhYmxlZF06aG92ZXIsIC5saW5rLS1kaXNhYmxlZDpob3ZlciB7XG4gIGNvbG9yOiAjMWExNzFiO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4ubGluay0taWNvbiB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgY29sb3I6ICNiMmIyYjI7XG4gIGZvbnQtc2l6ZTogMC44NjY2NjY2NjY3cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xuICBsaW5lLWhlaWdodDogMS4wNjY2NjY2NjY3cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmxpbmstLWljb24ge1xuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gICAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIH1cbn1cbi5saW5rLS1pY29uOmhvdmVyLCAubGluay0taWNvbjpmb2N1cyB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6ICM5MjkyOTI7XG59XG4ubGluay0taWNvbjpob3ZlciAuaWNvbiwgLmxpbmstLWljb246Zm9jdXMgLmljb24ge1xuICBjb2xvcjogIzkyOTI5Mjtcbn1cbi5saW5rLS1mb290ZXIge1xuICBjb2xvcjogI2IyYjJiMjtcbiAgbGluZS1oZWlnaHQ6IDJyZW07XG59XG4ubGluay0tZm9vdGVyOmhvdmVyLCAubGluay0tZm9vdGVyOmZvY3VzIHtcbiAgY29sb3I6ICM5MjkyOTI7XG59XG4ubGluay0tY2hlY2tvdXQge1xuICBmb250LXNpemU6IDAuODY2NjY2NjY2N3JlbTtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbn1cbi5saW5rLS1zb2NpYWwge1xuICBjb2xvcjogIzkyOTI5Mjtcbn1cbi5saW5rLS1zb2NpYWw6aG92ZXIsIC5saW5rLS1zb2NpYWw6Zm9jdXMge1xuICBjb2xvcjogI2IyYjJiMjtcbn1cbi5saW5rLS1wcml2YWN5IHtcbiAgY29sb3I6ICNmZmY7XG59XG4ubGluay0tcHJpdmFjeTpob3ZlciwgLmxpbmstLXByaXZhY3k6Zm9jdXMge1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5saW5rLS1hY3Rpb24ge1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5saW5rLS1hY3Rpb246aG92ZXIsIC5saW5rLS1hY3Rpb246Zm9jdXMge1xuICBjb2xvcjogIzkyOTI5Mjtcbn1cbi5saW5rLS1saW5rIHtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmxpbmstLWxpbms6aG92ZXIsIC5saW5rLS1saW5rOmZvY3VzIHtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5saW5rLS1saW5rLWJnLWFsdCB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLmxpbmstLWxpbmstYmctYWx0OmhvdmVyLCAubGluay0tbGluay1iZy1hbHQ6Zm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRiNGI0ZDtcbn1cbi5saW5rLS1lcnJvci1ibG9jayB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICBmb250OiA0MDAgMXJlbS8ycmVtIFwiTGF0b1wiLCBzYW5zLXNlcmlmO1xuICBjb2xvcjogI2ZmZjtcbn1cbi5saW5rLS1jb21wYW55LXVzZXIge1xuICBjb2xvcjogI2IyYjJiMjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5saW5rLS1jb21wYW55LXVzZXIge1xuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gICAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIH1cbn1cbi5saW5rLS1jb21wYW55LXVzZXI6Zm9jdXMsIC5saW5rLS1jb21wYW55LXVzZXI6aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiAjNmY2ZjZmO1xufVxuLmxpbmstLXNlY29uZGFyeSB7XG4gIGNvbG9yOiAjZmZmO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmxpbmstLXNlY29uZGFyeSB7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgfVxufVxuLmxpbmstLXNlY29uZGFyeTpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6ICNmZWNjMDA7XG59XG4ubGluay0tYWx0ZXJuYXRpdmUge1xuICBjb2xvcjogIzAwMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5saW5rLS1hbHRlcm5hdGl2ZSB7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgfVxufVxuLmxpbmstLWFsdGVybmF0aXZlOmZvY3VzLCAubGluay0tYWx0ZXJuYXRpdmU6aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiAjYjJiMmIyO1xufVxuLmxpbmstLWFkZGl0aW9uYWwge1xuICBjb2xvcjogI2ZlY2MwMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5saW5rLS1hZGRpdGlvbmFsIHtcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IGNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICAgIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICB9XG59XG4ubGluay0tYWRkaXRpb25hbDpmb2N1cywgLmxpbmstLWFkZGl0aW9uYWw6aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiAjOTI5MjkyO1xufVxuLmxpbmstLXRvLWJ1dHRvbiB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAwLjczMzMzMzMzMzNyZW07XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gIGJvcmRlcjogMC4wNjY2NjY2NjY3cmVtIHNvbGlkICNlY2VjZWM7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5saW5rLS10by1idXR0b24ge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGJvcmRlcjogMDtcbiAgICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgcGFkZGluZzogMDtcbiAgICBmb250LXNpemU6IDAuODY2NjY2NjY2N3JlbTtcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ubGlzdF9faXRlbSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmxpc3RfX2l0ZW0gPiAubGlzdCB7XG4gIG1hcmdpbi1sZWZ0OiAwLjVyZW07XG59XG4ubGlzdC0taW5saW5lIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLmxpc3QtLWlubGluZSA+IC5saXN0X19pdGVtIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW46IDAgMC41cmVtO1xufVxuLmxpc3QtLWlubGluZSA+IC5saXN0X19pdGVtOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG4ubGlzdC0taW5saW5lID4gLmxpc3RfX2l0ZW06bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1yaWdodDogMDtcbn1cbi5saXN0LS1idWxsZXQgLmxpc3RfX2l0ZW06OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwi4oCiXCI7XG4gIG1hcmdpbi1yaWdodDogMC4yNXJlbTtcbn1cbi5saXN0LS1wbHVzIC5saXN0X19pdGVtOjpiZWZvcmUge1xuICBjb250ZW50OiBcIitcIjtcbiAgbWFyZ2luLXJpZ2h0OiAwLjI1cmVtO1xufVxuLmxpc3QtLWFsZXJ0IHtcbiAgY29sb3I6ICNlMzIyMTM7XG59XG4ubGlzdC0tZm9vdGVyIHtcbiAgcGFkZGluZzogMCAxLjMzMzMzMzMzMzNyZW07XG4gIG1hcmdpbi1ib3R0b206IDEuNzMzMzMzMzMzM3JlbTtcbiAgZGlzcGxheTogdGFibGU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5saXN0LS1mb290ZXIge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuLmxpc3QtLWNoZWNrb3V0IHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5saXN0LS1jaGVja291dCA+IC5saXN0X19pdGVtIHtcbiAgbWFyZ2luLWxlZnQ6IDEuMjY2NjY2NjY2N3JlbTtcbiAgbWFyZ2luLXJpZ2h0OiAxLjI2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5saXN0LS1jaGVja291dCA+IC5saXN0X19pdGVtIHtcbiAgICBtYXJnaW4tbGVmdDogMC42NjY2NjY2NjY3cmVtO1xuICAgIG1hcmdpbi1yaWdodDogMC42NjY2NjY2NjY3cmVtO1xuICB9XG59XG4ubGlzdC0tY2hlY2tib3gge1xuICBtYXJnaW46IDAuNTMzMzMzMzMzM3JlbSAwO1xufVxuLmxpc3RfX2l0ZW0tLWlubGluZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5saXN0X19pdGVtLS1jaGVja2JveCB7XG4gIG1hcmdpbi1ib3R0b206IDAuNTMzMzMzMzMzM3JlbTtcbn1cbi5saXN0X19pdGVtOmhvdmVyIHtcbiAgY29sb3I6ICNmZWNjMDA7XG59XG4ubGlzdC0tY29tcGFueS11c2VyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDEwMCU7XG4gIHJpZ2h0OiAwO1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGxpbmUtaGVpZ2h0OiAyLjA2NjY2NjY2NjdyZW07XG4gIGxldHRlci1zcGFjaW5nOiAwLjAxMzMzMzMzMzNyZW07XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAxMHB4IDEwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAxLjJyZW0gMS4ycmVtIDAgcmdiYSgyNiwgMjMsIDI3LCAwLjA1KSwgMCAwLjJyZW0gMC4ycmVtIDAgcmdiYSgyNiwgMjMsIDI3LCAwLjA1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEuMnJlbSAxLjJyZW0gMCByZ2JhKDI2LCAyMywgMjcsIDAuMDUpLCAwIDAuMnJlbSAwLjJyZW0gMCByZ2JhKDI2LCAyMywgMjcsIDAuMDUpO1xuICBwYWRkaW5nOiAxLjRyZW0gMi41MzMzMzMzMzMzcmVtIDEuNHJlbSAxLjkzMzMzMzMzMzNyZW07XG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogdG9wIHJpZ2h0O1xuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XG4gIHotaW5kZXg6IDEwO1xuICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgZWFzZS1pbi1vdXQsIC13ZWJraXQtdHJhbnNmb3JtIDI1MG1zIGVhc2UtaW4tb3V0O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxNDAwcHgpIHtcbiAgLmxpc3QtLWNvbXBhbnktdXNlciB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiB0b3AgbGVmdDtcbiAgICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcCBsZWZ0O1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IGF1dG87XG4gIH1cbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNoZWNrYm94IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLmNoZWNrYm94X19jb250YWluZXIge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gICAgICAgICAgZmxleC1mbG93OiByb3cgbm93cmFwO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uY2hlY2tib3hfX2JveCB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAyNTBtcyBlYXNlLWluLW91dCwgYm9yZGVyLWNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB3aWR0aDogMS40NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDEuNDY2NjY2NjY2N3JlbTtcbiAgYm9yZGVyOiAwLjA2NjY2NjY2NjdyZW0gc29saWQgI2QwZDBkMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgbWFyZ2luLXJpZ2h0OiAwLjY2NjY2NjY2NjdyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogMC4xMzMzMzMzMzMzcmVtO1xuICAtd2Via2l0LWJveC1mbGV4OiAwO1xuICAgICAgLW1zLWZsZXg6IG5vbmU7XG4gICAgICAgICAgZmxleDogbm9uZTtcbn1cbi5jaGVja2JveF9fYm94IHN2ZyB7XG4gIHdpZHRoOiAxcmVtO1xuICBoZWlnaHQ6IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jaGVja2JveF9fYm94IHtcbiAgICBtYXJnaW4tcmlnaHQ6IDAuOTMzMzMzMzMzM3JlbTtcbiAgICB3aWR0aDogMS40NjY2NjY2NjY3cmVtO1xuICAgIGhlaWdodDogMS40NjY2NjY2NjY3cmVtO1xuICB9XG59XG4uY2hlY2tib3hfX2JveC0tZmlsdGVyIHtcbiAgd2lkdGg6IDEuNnJlbTtcbiAgaGVpZ2h0OiAxLjZyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjZyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jaGVja2JveF9fYm94LS1maWx0ZXIge1xuICAgIHdpZHRoOiAxLjEyNXJlbTtcbiAgICBoZWlnaHQ6IDEuMTI1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNXJlbTtcbiAgfVxufVxuLmNoZWNrYm94X19ib3gtLXNob3BwaW5nLWxpc3Qge1xuICBwb3NpdGlvbjogc3RhdGljO1xuICB6LWluZGV4OiAxO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY2hlY2tib3hfX2JveC0tc2hvcHBpbmctbGlzdCB7XG4gICAgcG9zaXRpb246IHN0YXRpYztcbiAgICBtYXJnaW4tcmlnaHQ6IDAuNjY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLmNoZWNrYm94X19ib3gtLWFsdGVybmF0aXZlIHtcbiAgYm9yZGVyOiBzb2xpZCAwLjEzMzMzMzMzMzNyZW0gI2QwZDBkMDtcbn1cbi5jaGVja2JveF9faW5wdXQge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgb3BhY2l0eTogMDtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICAgICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAxLjQ2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMS40NjY2NjY2NjY3cmVtO1xufVxuLmNoZWNrYm94X19pbnB1dDpjaGVja2VkIH4gLmNoZWNrYm94X19ib3gge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4uY2hlY2tib3hfX2lucHV0OmNoZWNrZWQgfiAuY2hlY2tib3hfX2JveCBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmNoZWNrYm94X19pbnB1dDpjaGVja2VkIH4gLmNoZWNrYm94X19ib3ggLmNoZWNrYm94X19jaGVjayB7XG4gIHBvaW50ZXItZXZlbnRzOiBhbGw7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIG9wYWNpdHk6IDE7XG59XG4uY2hlY2tib3hfX2lucHV0OmNoZWNrZWQgfiAuY2hlY2tib3hfX2JveC0tYWx0ZXJuYXRpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXItY29sb3I6ICNkMGQwZDA7XG59XG4uY2hlY2tib3hfX2lucHV0OmNoZWNrZWQgfiAuY2hlY2tib3hfX2xhYmVsIHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4uY2hlY2tib3hfX2lucHV0OmNoZWNrZWQgfiAuY2hlY2tib3hfX2xhYmVsLS1hbHRlcm5hdGl2ZSB7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG4uY2hlY2tib3hfX2lucHV0OmZvY3VzIH4gLmNoZWNrYm94X19ib3gge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCAwIDNweCAjZmVjYzAwO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAjZmVjYzAwO1xufVxuLmNoZWNrYm94X19pbnB1dFtkaXNhYmxlZF0gfiAuY2hlY2tib3hfX2JveCwgLmNoZWNrYm94X19pbnB1dFtkaXNhYmxlZF0gfiAuY2hlY2tib3hfX2JveDpob3ZlciwgLmNoZWNrYm94X19pbnB1dC0tZGlzYWJsZWQgfiAuY2hlY2tib3hfX2JveCwgLmNoZWNrYm94X19pbnB1dC0tZGlzYWJsZWQgfiAuY2hlY2tib3hfX2JveDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogI2VjZWNlYztcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbi5jaGVja2JveF9faW5wdXRbZGlzYWJsZWRdOmNoZWNrZWQgfiAuY2hlY2tib3hfX2JveCwgLmNoZWNrYm94X19pbnB1dC0tZGlzYWJsZWQ6Y2hlY2tlZCB+IC5jaGVja2JveF9fYm94IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbn1cbi5jaGVja2JveF9faW5wdXRbZGlzYWJsZWRdIH4gLmNoZWNrYm94X19sYWJlbCwgLmNoZWNrYm94X19pbnB1dC0tZGlzYWJsZWQgfiAuY2hlY2tib3hfX2xhYmVsIHtcbiAgY29sb3I6ICNkMGQwZDA7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4uY2hlY2tib3hfX2NoZWNrIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgb3BhY2l0eTogMDtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0LCBvcGFjaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0LCBvcGFjaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICBsaW5lLWhlaWdodDogMC45MzMzMzMzMzMzcmVtO1xufVxuLmNoZWNrYm94X19jaGVjay0tYWx0ZXJuYXRpdmUge1xuICBjb2xvcjogI2QwZDBkMDtcbiAgbWFyZ2luLWJvdHRvbTogMC4xMzMzMzMzMzMzcmVtO1xufVxuLmNoZWNrYm94X19sYWJlbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBtYXJnaW46IDA7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleDogMTtcbiAgICAgICAgICBmbGV4OiAxO1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0bztcbiAgICAgIGZsZXgtYmFzaXM6IGF1dG87XG59XG4uY2hlY2tib3hfX2xhYmVsLS1maWx0ZXIge1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXgtcG9zaXRpdmU6IDE7XG4gICAgICAgICAgZmxleC1ncm93OiAxO1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLmNoZWNrYm94X19sYWJlbC0tYWx0ZXJuYXRpdmUge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjMzMzMzMzMzMzNyZW07XG4gIGNvbG9yOiAjZDBkMGQwO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbn1cbi5jaGVja2JveF9fY291bnRlciB7XG4gIHBhZGRpbmctbGVmdDogMC41MzMzMzMzMzMzcmVtO1xufVxuLmNoZWNrYm94LS1leHBhbmQge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIC13ZWJraXQtYm94LXBhY2s6IHN0YXJ0O1xuICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuLmNoZWNrYm94LS1maWx0ZXIge1xuICB3aWR0aDogMTAwJTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS4ycmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY2hlY2tib3gtLWZpbHRlciB7XG4gICAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIH1cbn1cbi5jaGVja2JveC0tYWx0ZXJuYXRpdmUge1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xufVxuLmNoZWNrYm94LS1hbHRlcm5hdGl2ZTpob3ZlciAuY2hlY2tib3hfX2JveC0tYWx0ZXJuYXRpdmUge1xuICBib3JkZXItY29sb3I6ICNkMGQwZDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jaGVja2JveC0tcGRwIHtcbiAgICBtYXJnaW4tbGVmdDogOC44cmVtO1xuICB9XG59XG4uY2hlY2tib3gtLXBkcDpob3ZlciAuY2hlY2tib3hfX2JveC0tYWx0ZXJuYXRpdmUge1xuICBib3JkZXItY29sb3I6ICNkMGQwZDA7XG59XG4uY2hlY2tib3gtLWVycm9yIC5jaGVja2JveF9fYm94IHtcbiAgYm9yZGVyLWNvbG9yOiAjZTMyMjEzO1xufVxuLmNoZWNrYm94OmhvdmVyIC5jaGVja2JveF9fYm94IHtcbiAgYm9yZGVyLWNvbG9yOiAjZmVjYzAwO1xufVxuLmNoZWNrYm94OmhvdmVyIC5jaGVja2JveF9faW5wdXRbZGlzYWJsZWRdIH4gLmNoZWNrYm94X19ib3gsXG4uY2hlY2tib3g6aG92ZXIgLmNoZWNrYm94X19pbnB1dC0tZGlzYWJsZWQgfiAuY2hlY2tib3hfX2JveCB7XG4gIGJvcmRlci1jb2xvcjogI2VjZWNlYztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLmNoZWNrYm94LnRvb2x0aXAtcG9zaXRpb24tbGVmdC1sZyAudG9vbHRpcC1idXR0b25fX3Rvb2x0aXAge1xuICAgIC8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gICAgLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICB9XG4gIC5jaGVja2JveC50b29sdGlwLXBvc2l0aW9uLWxlZnQtbGcgLnRvb2x0aXAtYnV0dG9uX190b29sdGlwOjphZnRlciB7XG4gICAgcmlnaHQ6IDQlO1xuICB9XG4gIC5jaGVja2JveC50b29sdGlwLXBvc2l0aW9uLWxlZnQtbGcgLnRvb2x0aXAtYnV0dG9uX190b29sdGlwLWNvbnRhaW5lciB7XG4gICAgbGVmdDogYXV0bztcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgfVxufVxuXG4ucmFkaW8ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4ucmFkaW9fX2NvbnRhaW5lciB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgICAgICAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5yYWRpb19fYm94IHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHdpZHRoOiAxLjQ2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMS40NjY2NjY2NjY3cmVtO1xuICBib3JkZXI6IDAuMDY2NjY2NjY2N3JlbSBzb2xpZCAjZDBkMGQwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBtYXJnaW4tcmlnaHQ6IDAuNjY2NjY2NjY2N3JlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItcmFkaXVzOiAwLjEzMzMzMzMzMzNyZW07XG4gIC13ZWJraXQtYm94LWZsZXg6IDA7XG4gICAgICAtbXMtZmxleDogbm9uZTtcbiAgICAgICAgICBmbGV4OiBub25lO1xufVxuLnJhZGlvX19ib3ggc3ZnIHtcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnJhZGlvX19ib3gge1xuICAgIG1hcmdpbi1yaWdodDogMC45MzMzMzMzMzMzcmVtO1xuICAgIHdpZHRoOiAxLjQ2NjY2NjY2NjdyZW07XG4gICAgaGVpZ2h0OiAxLjQ2NjY2NjY2NjdyZW07XG4gIH1cbn1cbi5yYWRpb19fYm94LS1maWx0ZXIge1xuICB3aWR0aDogMS42cmVtO1xuICBoZWlnaHQ6IDEuNnJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNnJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnJhZGlvX19ib3gtLWZpbHRlciB7XG4gICAgd2lkdGg6IDEuMTI1cmVtO1xuICAgIGhlaWdodDogMS4xMjVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1cmVtO1xuICB9XG59XG4ucmFkaW9fX2JveC0tc2hvcHBpbmctbGlzdCB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG4gIHotaW5kZXg6IDE7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5yYWRpb19fYm94LS1zaG9wcGluZy1saXN0IHtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgIG1hcmdpbi1yaWdodDogMC42NjY2NjY2NjY3cmVtO1xuICB9XG59XG4ucmFkaW9fX2JveC0tYWx0ZXJuYXRpdmUge1xuICBib3JkZXI6IHNvbGlkIDAuMTMzMzMzMzMzM3JlbSAjZDBkMGQwO1xufVxuLnJhZGlvX19pbnB1dCB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBvcGFjaXR5OiAwO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgICBhcHBlYXJhbmNlOiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgd2lkdGg6IDEuNDY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAxLjQ2NjY2NjY2NjdyZW07XG59XG4ucmFkaW9fX2lucHV0OmNoZWNrZWQgfiAucmFkaW9fX2JveCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbi5yYWRpb19faW5wdXQ6Y2hlY2tlZCB+IC5yYWRpb19fYm94IHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4ucmFkaW9fX2lucHV0OmNoZWNrZWQgfiAucmFkaW9fX2JveCAucmFkaW9fX2NoZWNrIHtcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgb3BhY2l0eTogMTtcbn1cbi5yYWRpb19faW5wdXQ6Y2hlY2tlZCB+IC5yYWRpb19fYm94LS1hbHRlcm5hdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbn1cbi5yYWRpb19faW5wdXQ6Y2hlY2tlZCB+IC5yYWRpb19fbGFiZWwge1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbi5yYWRpb19faW5wdXQ6Y2hlY2tlZCB+IC5yYWRpb19fbGFiZWwtLWFsdGVybmF0aXZlIHtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5yYWRpb19faW5wdXQ6Zm9jdXMgfiAucmFkaW9fX2JveCB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDAgM3B4ICNmZWNjMDA7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICNmZWNjMDA7XG59XG4ucmFkaW9fX2lucHV0W2Rpc2FibGVkXSB+IC5yYWRpb19fYm94LCAucmFkaW9fX2lucHV0W2Rpc2FibGVkXSB+IC5yYWRpb19fYm94OmhvdmVyLCAucmFkaW9fX2lucHV0LS1kaXNhYmxlZCB+IC5yYWRpb19fYm94LCAucmFkaW9fX2lucHV0LS1kaXNhYmxlZCB+IC5yYWRpb19fYm94OmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLWNvbG9yOiAjZWNlY2VjO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLnJhZGlvX19pbnB1dFtkaXNhYmxlZF06Y2hlY2tlZCB+IC5yYWRpb19fYm94LCAucmFkaW9fX2lucHV0LS1kaXNhYmxlZDpjaGVja2VkIH4gLnJhZGlvX19ib3gge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xufVxuLnJhZGlvX19pbnB1dFtkaXNhYmxlZF0gfiAucmFkaW9fX2xhYmVsLCAucmFkaW9fX2lucHV0LS1kaXNhYmxlZCB+IC5yYWRpb19fbGFiZWwge1xuICBjb2xvcjogI2QwZDBkMDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbi5yYWRpb19fY2hlY2sge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBvcGFjaXR5OiAwO1xuICAtd2Via2l0LXRyYW5zaXRpb246IHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQsIG9wYWNpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQsIG9wYWNpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gIGxpbmUtaGVpZ2h0OiAwLjkzMzMzMzMzMzNyZW07XG59XG4ucmFkaW9fX2NoZWNrLS1hbHRlcm5hdGl2ZSB7XG4gIGNvbG9yOiAjZDBkMGQwO1xuICBtYXJnaW4tYm90dG9tOiAwLjEzMzMzMzMzMzNyZW07XG59XG4ucmFkaW9fX2xhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIG1hcmdpbjogMDtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4OiAxO1xuICAgICAgICAgIGZsZXg6IDE7XG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xuICAgICAgZmxleC1iYXNpczogYXV0bztcbn1cbi5yYWRpb19fbGFiZWwtLWZpbHRlciB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcbiAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4ucmFkaW9fX2xhYmVsLS1hbHRlcm5hdGl2ZSB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDEuMzMzMzMzMzMzM3JlbTtcbiAgY29sb3I6ICNkMGQwZDA7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuLnJhZGlvX19jb3VudGVyIHtcbiAgcGFkZGluZy1sZWZ0OiAwLjUzMzMzMzMzMzNyZW07XG59XG4ucmFkaW8tLWV4cGFuZCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG59XG4ucmFkaW8tLWZpbHRlciB7XG4gIHdpZHRoOiAxMDAlO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjJyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5yYWRpby0tZmlsdGVyIHtcbiAgICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLnJhZGlvLS1hbHRlcm5hdGl2ZSB7XG4gIG1hcmdpbi1ib3R0b206IDFyZW07XG59XG4ucmFkaW8tLWFsdGVybmF0aXZlOmhvdmVyIC5yYWRpb19fYm94LS1hbHRlcm5hdGl2ZSB7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnJhZGlvLS1wZHAge1xuICAgIG1hcmdpbi1sZWZ0OiA4LjhyZW07XG4gIH1cbn1cbi5yYWRpby0tcGRwOmhvdmVyIC5yYWRpb19fYm94LS1hbHRlcm5hdGl2ZSB7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbn1cbi5yYWRpby0tZXJyb3IgLnJhZGlvX19ib3gge1xuICBib3JkZXItY29sb3I6ICNlMzIyMTM7XG59XG4ucmFkaW86aG92ZXIgLnJhZGlvX19ib3gge1xuICBib3JkZXItY29sb3I6ICNmZWNjMDA7XG59XG4ucmFkaW86aG92ZXIgLnJhZGlvX19pbnB1dFtkaXNhYmxlZF0gfiAucmFkaW9fX2JveCxcbi5yYWRpbzpob3ZlciAucmFkaW9fX2lucHV0LS1kaXNhYmxlZCB+IC5yYWRpb19fYm94IHtcbiAgYm9yZGVyLWNvbG9yOiAjZWNlY2VjO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAucmFkaW8udG9vbHRpcC1wb3NpdGlvbi1sZWZ0LWxnIC50b29sdGlwLWJ1dHRvbl9fdG9vbHRpcCB7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLnJhZGlvLnRvb2x0aXAtcG9zaXRpb24tbGVmdC1sZyAudG9vbHRpcC1idXR0b25fX3Rvb2x0aXA6OmFmdGVyIHtcbiAgICByaWdodDogNCU7XG4gIH1cbiAgLnJhZGlvLnRvb2x0aXAtcG9zaXRpb24tbGVmdC1sZyAudG9vbHRpcC1idXR0b25fX3Rvb2x0aXAtY29udGFpbmVyIHtcbiAgICBsZWZ0OiBhdXRvO1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBub25lO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG59XG4ucmFkaW8tLW1vYmlsZS1zbWFsbCAucmFkaW9fX2JveCB7XG4gIHdpZHRoOiAxcmVtO1xuICBoZWlnaHQ6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG4ucmFkaW9fX2JveCB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gIGJvcmRlci13aWR0aDogMC4xMzMzMzMzMzMzcmVtO1xufVxuLnJhZGlvX19jaGVjayB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ucmFkaW9fX2xhYmVsIHtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG5AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpLCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSkge1xuICAucmFkaW9fX2xhYmVsIHtcbiAgICAtbXMtZmxleC1uZWdhdGl2ZTogMDtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XG4gICAgICAgIGZsZXgtYmFzaXM6IGF1dG87XG4gIH1cbn1cbi5yYWRpb19faW5wdXQ6Y2hlY2tlZCB+IC5yYWRpb19fYm94IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRiNGI0ZDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDAgMCAwLjMycmVtICNmZmY7XG4gICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMC4zMnJlbSAjZmZmO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4gIGJvcmRlci13aWR0aDogMXB4ICFpbXBvcnRhbnQ7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbn1cbi5yYWRpb19faW5wdXQ6Y2hlY2tlZCB+IC5yYWRpb19fbGFiZWwge1xuICBmb250LXdlaWdodDogNDAwO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uc2VsZWN0IHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2QwZDBkMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgcGFkZGluZy1yaWdodDogMS4zMzMzMzMzMzMzcmVtO1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgaGVpZ2h0OiAzLjMzMzMzMzMzMzNyZW07XG59XG4uc2VsZWN0X19zZWxlY3Qge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBwYWRkaW5nLWxlZnQ6IDAuMjVyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGJvcmRlcjogMC4yNXJlbSBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBib3JkZXItcmlnaHQtd2lkdGg6IDEuNXJlbTtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgei1pbmRleDogMjtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICAgICAgYXBwZWFyYW5jZTogbm9uZTtcbn1cbi5zZWxlY3RfX3NlbGVjdDo6LW1zLWV4cGFuZCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uc2VsZWN0X19zZWxlY3RbZGlzYWJsZWRdLCAuc2VsZWN0X19zZWxlY3QtLWRpc2FibGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbi5zZWxlY3RfX2NhcmV0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGJvdHRvbTogMDtcbiAgcmlnaHQ6IDAuMjVyZW07XG4gIG1hcmdpbjogYXV0bztcbiAgY29sb3I6ICM3Nzc3Nzc7XG4gIHotaW5kZXg6IDE7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLnNlbGVjdC0tZXhwYW5kLCAuc2VsZWN0LS1leHBhbmQgLnNlbGVjdF9fc2VsZWN0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xufVxuLnNlbGVjdC0tbmFrZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBib3JkZXI6IG5vbmU7XG59XG4uc2VsZWN0LS1lcnJvciB7XG4gIGJvcmRlci1jb2xvcjogI2UzMjIxMztcbn1cbi5zZWxlY3QtLWVycm9yIC5zZWxlY3RfX2NhcmV0IHtcbiAgY29sb3I6ICNlMzIyMTM7XG59XG4uc2VsZWN0X19zZWxlY3Qge1xuICBoZWlnaHQ6IDEwMCU7XG59XG4uc2VsZWN0X19jYXJldCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxLjMzMzMzMzMzMzNyZW07XG4gIHJpZ2h0OiAxcmVtO1xufVxuLnNlbGVjdF9fY2FyZXQgc3ZnIHtcbiAgd2lkdGg6IDEuMzMzMzMzMzMzM3JlbTtcbiAgaGVpZ2h0OiAxLjMzMzMzMzMzMzNyZW07XG59XG4uc2VsZWN0LS1xdWljay1vcmRlci1wYWdlIHtcbiAgcGFkZGluZzogMXJlbSAwLjY2NjY2NjY2NjdyZW07XG4gIGJhY2tncm91bmQtY29sb3I6ICMxYTE3MWI7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gIGNvbG9yOiAjYjJiMmIyO1xufVxuLnNlbGVjdC0tcXVpY2stb3JkZXItcGFnZTpob3ZlciB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnRhYmxlIHRoZWFkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xufVxuLnRhYmxlIHRoZWFkIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4udGFibGUgdGgge1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi50YWJsZSB0aCxcbi50YWJsZSB0ZCB7XG4gIHBhZGRpbmc6IDFyZW07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC50YWJsZSB0aCxcbiAgLnRhYmxlIHRkIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNXJlbTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxLjVyZW07XG4gIH1cbn1cbi50YWJsZSB0Ym9keSB7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAudGFibGUgdGJvZHkgdHIge1xuICAgIGJvcmRlcjogMC4wNjY2NjY2NjY3cmVtIHNvbGlkICNlY2VjZWM7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnRhYmxlIHRib2R5IHRyOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICBib3JkZXItdG9wOiAwLjA2NjY2NjY2NjdyZW0gc29saWQgI2VjZWNlYztcbiAgfVxufVxuLnRhYmxlIHRib2R5IHRoIHtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi50YWJsZSB0Ym9keSB0ZCB7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLnRhYmxlIHRib2R5IHN0cm9uZyB7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLnRhYmxlLS1leHBhbmQge1xuICB3aWR0aDogMTAwJTtcbn1cbi50YWJsZV9fcm93LS1pbmFjdGl2ZSB7XG4gIGNvbG9yOiAjZDBkMGQwO1xufVxuLnRhYmxlLS1ncmlkIHRoZWFkIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbi50YWJsZS0tZ3JpZCB0aCB7XG4gIHBhZGRpbmc6IDAuNXJlbSAxcmVtO1xufVxuLnRhYmxlLS1ncmlkIHRkIHtcbiAgcGFkZGluZzogMS4wNjY2NjY2NjY3cmVtIDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC50YWJsZS0tcmVzcG9uc2l2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbiAgLnRhYmxlLS1yZXNwb25zaXZlIHRoZWFkLFxuICAudGFibGUtLXJlc3BvbnNpdmUgdGJvZHksXG4gIC50YWJsZS0tcmVzcG9uc2l2ZSB0aCxcbiAgLnRhYmxlLS1yZXNwb25zaXZlIHRkIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgfVxuICAudGFibGUtLXJlc3BvbnNpdmUgdGhlYWQgdHIsXG4gIC50YWJsZS0tcmVzcG9uc2l2ZSB0aGVhZCB0aCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAudGFibGUtLXJlc3BvbnNpdmUgdHIge1xuICAgIHBhZGRpbmctdG9wOiAxNXB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICB9XG4gIC50YWJsZS0tcmVzcG9uc2l2ZSB0Ym9keSB0cjpub3QoLmlzLWhpZGRlbi1zbS1tZCkge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG4gIC50YWJsZS0tcmVzcG9uc2l2ZSB0ZCB7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbiAgLnRhYmxlLS1yZXNwb25zaXZlIHRkOjpiZWZvcmUge1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIHBhZGRpbmctcmlnaHQ6IDAuNjY2NjY2NjY2N3JlbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIC1tcy1mbGV4LW5lZ2F0aXZlOiAwO1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgfVxuICAudGFibGUtLXJlc3BvbnNpdmUgLnJvdyB7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLnRhYmxlLS1yZXNwb25zaXZlIC5yb3ctLW9yZGVyLWRldGFpbHMge1xuICAgIGJvcmRlci13aWR0aDogMXB4O1xuICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLWNvbG9yOiAjZWNlY2VjO1xuICAgIHBhZGRpbmc6IDFyZW07XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAudGFibGUtLXJlc3BvbnNpdmUgLnJvdy0tb3JkZXItZGV0YWlscyB7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAudGFibGUtLXJlc3BvbnNpdmUgLnRyYW5zZm9ybS10YWJsZS1oZWFkZXIsXG4gIC50YWJsZS0tcmVzcG9uc2l2ZSAudHJhbnNmb3JtLXRhYmxlLWhlYWRlcl9fY2VsbCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogMDtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmO1xuICB9XG4gIC50YWJsZS0tcmVzcG9uc2l2ZSAudHJhbnNmb3JtLXRhYmxlLWhlYWRlcl9fY2VsbCB7XG4gICAgZm9udC1zaXplOiAxLjJyZW07XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBwYWRkaW5nLXRvcDogMS4wNjY2NjY2NjY3cmVtO1xuICB9XG4gIC50YWJsZS0tcmVzcG9uc2l2ZSAudHJhbnNmb3JtLWNlbGwge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGNvbG9yOiAjNGI0YjRkO1xuICAgIC8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gICAgLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnRhYmxlLS1yZXNwb25zaXZlIC50cmFuc2Zvcm0tY2VsbCB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAudGFibGUtLXJlc3BvbnNpdmUgLnRyYW5zZm9ybS1jZWxsOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1jb250ZW50KSBcIjpcIjtcbiAgfVxuICAudGFibGUtLXJlc3BvbnNpdmUgLnRyYW5zZm9ybS1jZWxsLS1hbHQge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgfVxuICAudGFibGUtLXJlc3BvbnNpdmUgLnRyYW5zZm9ybS1jZWxsLS1uby1sYWJlbDo6YmVmb3JlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi50ZXh0YXJlYSB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkMGQwZDA7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBwYWRkaW5nOiAwLjkzMzMzMzMzMzNyZW0gMS4zMzMzMzMzMzMzcmVtO1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgd2lkdGg6IDEwMCU7XG59XG4udGV4dGFyZWEtLWVycm9yIHtcbiAgYm9yZGVyLWNvbG9yOiAjZTMyMjEzO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4udGh1bWJuYWlsLS1zbWFsbGVyIHtcbiAgbWluLWhlaWdodDogMy40NjY2NjY2NjY3cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAudGh1bWJuYWlsLS1zbWFsbGVyIHtcbiAgICBtaW4taGVpZ2h0OiAyLjhyZW07XG4gIH1cbn1cbi50aHVtYm5haWwtLXNtYWxsIHtcbiAgbWluLWhlaWdodDogNXJlbTtcbn1cbi50aHVtYm5haWwtLWJpZyB7XG4gIG1pbi1oZWlnaHQ6IDIwcmVtO1xufVxuLnRodW1ibmFpbC0tYmlnZ2VyIHtcbiAgbWluLWhlaWdodDogMzByZW07XG59XG4udGh1bWJuYWlsLS1taW4tc2l6ZSB7XG4gIG1pbi13aWR0aDogMi41cmVtO1xufVxuLnRodW1ibmFpbC0tcmVzZXQtaW5kZW50cyB7XG4gIG1hcmdpbjogMDtcbn1cbi50aHVtYm5haWwtLWNhdGVnb3J5LWxpc3Qge1xuICBtaW4taGVpZ2h0OiAyMC44NjY2NjY2NjY3cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAudGh1bWJuYWlsLS1jYXRlZ29yeS1saXN0IHtcbiAgICBtaW4taGVpZ2h0OiAxMHJlbTtcbiAgfVxufVxuLnRodW1ibmFpbC0tY2F0YWxvZyB7XG4gIG1pbi1oZWlnaHQ6IDEycmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAudGh1bWJuYWlsLS1jYXRhbG9nIHtcbiAgICBtaW4taGVpZ2h0OiAxNXJlbTtcbiAgfVxufVxuLnRodW1ibmFpbC0tY2F0ZWdvcnkge1xuICBtaW4taGVpZ2h0OiA4LjI2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC50aHVtYm5haWwtLWNhdGVnb3J5IHtcbiAgICBtaW4taGVpZ2h0OiAxNXJlbTtcbiAgfVxufVxuLnRodW1ibmFpbC0tc2hvcHBpbmctbGlzdCB7XG4gIG1pbi1oZWlnaHQ6IDVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC50aHVtYm5haWwtLXNob3BwaW5nLWxpc3Qge1xuICAgIG1pbi1oZWlnaHQ6IDEwcmVtO1xuICB9XG59XG4udGh1bWJuYWlsLS1jYXJ0IHtcbiAgbWluLWhlaWdodDogNXJlbTtcbiAgbWFyZ2luOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAudGh1bWJuYWlsLS1jYXJ0IHtcbiAgICBtaW4taGVpZ2h0OiAxMC42NjY2NjY2NjY3cmVtO1xuICAgIG1hcmdpbjogMC41MzMzMzMzMzMzcmVtO1xuICB9XG59XG4udGh1bWJuYWlsLS1zdW1tYXJ5IHtcbiAgbWluLWhlaWdodDogNXJlbTtcbiAgbWFyZ2luOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAudGh1bWJuYWlsLS1zdW1tYXJ5IHtcbiAgICBtaW4taGVpZ2h0OiA2LjY2NjY2NjY2NjdyZW07XG4gICAgbWFyZ2luOiAwLjI2NjY2NjY2NjdyZW07XG4gIH1cbn1cbi50aHVtYm5haWwtLWhhcy1ib3JkZXIge1xuICBib3JkZXI6IDAuMjVyZW0gc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMCAxcHggI2YwZjBmMDtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2YwZjBmMDtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnRpdGxlLS1mb290ZXIge1xuICB3aWR0aDogMTAwJTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogM3JlbTtcbiAgcGFkZGluZzogMCAxLjMzMzMzMzMzMzNyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC50aXRsZS0tZm9vdGVyIHtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGxpbmUtaGVpZ2h0OiAyLjI2NjY2NjY2NjdyZW07XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuLnRpdGxlLS1mb290ZXIgLmljb24tLWNhcmV0LXVwIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi50aXRsZS0tZm9vdGVyLmFjdGl2ZSAuaWNvbi0tY2FyZXQge1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4udGl0bGUtLWZvb3Rlci5hY3RpdmUgLmljb24tLWNhcmV0LXVwIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAudGl0bGUtLWZvb3Rlci5hY3RpdmUgLmljb24tLWNhcmV0LXVwIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4udGl0bGUtLWZvb3Rlci5hY3RpdmUgLmljb24tLWNhcmV0LWRvd24ge1xuICBkaXNwbGF5OiBub25lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAudGl0bGUtLWxnLWxoLWluaXRpYWwge1xuICAgIGxpbmUtaGVpZ2h0OiBpbml0aWFsO1xuICB9XG59XG4udGl0bGUtLWZvb3Rlci1sb2dvIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnRpdGxlLS1mb290ZXItbG9nbyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLnRpdGxlLS1zdWJzY3JpcHRpb24ge1xuICBmb250OiA3MDAgMS4wNjY2NjY2NjY3cmVtLzMuMzMzMzMzMzMzM3JlbSBcIkxhdG9cIiwgc2Fucy1zZXJpZjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAudGl0bGUtLXN1YnNjcmlwdGlvbiB7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC50aXRsZS0tc3Vic2NyaXB0aW9uIHtcbiAgICBmb250LXNpemU6IDEuNzMzMzMzMzMzM3JlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnRpdGxlLS1zdWJzY3JpcHRpb24ge1xuICAgIGZvbnQtc2l6ZTogMi4yNjY2NjY2NjY3cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAyLjg2NjY2NjY2NjdyZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDJyZW07XG4gIH1cbn1cbi50aXRsZS0tY2hlY2tvdXQge1xuICBmb250LXNpemU6IDEuMnJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xufVxuLnRpdGxlLS1zZWNvbmQge1xuICBmb250LXNpemU6IDEuMnJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC45MzMzMzMzMzMzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAudGl0bGUtLXNlY29uZCB7XG4gICAgZm9udC1zaXplOiAxLjZyZW07XG4gIH1cbn1cbi50aXRsZV9faW5kZXgge1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgbWFyZ2luLXJpZ2h0OiAwLjI2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC50aXRsZV9faW5kZXgge1xuICAgIG1hcmdpbi1yaWdodDogMC41MzMzMzMzMzMzcmVtO1xuICB9XG59XG4udGl0bGUtLXN1YiB7XG4gIGNvbG9yOiAjYjJiMmIyO1xuICBmb250LXdlaWdodDogNDAwO1xuICBtYXJnaW4tYm90dG9tOiAwLjhyZW07XG59XG4udGl0bGUtLWVycm9yLXBhZ2Uge1xuICBmb250OiA3MDAgMi4xMzMzMzMzMzMzcmVtLzIuNzMzMzMzMzMzM3JlbSBcIkxhdG9cIiwgc2Fucy1zZXJpZjtcbiAgbWFyZ2luLWJvdHRvbTogMC40NjY2NjY2NjY3cmVtO1xufVxuLnRpdGxlLS1wcm9kdWN0LXJldmlldyB7XG4gIG1hcmdpbjogMi40cmVtIDAgMS42cmVtO1xufVxuLnRpdGxlLS1wcm9kdWN0LXNsaWRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxLjg2NjY2NjY2NjdyZW07XG4gIG1hcmdpbi1ib3R0b206IDEuMDY2NjY2NjY2N3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnRpdGxlLS1wcm9kdWN0LXNsaWRlciB7XG4gICAgbWFyZ2luLWJvdHRvbTogMi4ycmVtO1xuICAgIGZvbnQtc2l6ZTogMi4xMzMzMzMzMzMzcmVtO1xuICB9XG59XG4udGl0bGUtLXRvcC1tYXJnaW4ge1xuICBtYXJnaW4tdG9wOiA0LjA2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC50aXRsZS0tdG9wLW1hcmdpbiB7XG4gICAgbWFyZ2luLXRvcDogNS4zMzMzMzMzMzMzcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAudGl0bGUtLXRvcC1tYXJnaW4ge1xuICAgIG1hcmdpbi10b3A6IDcuMzMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLnRpdGxlLS10b3AtbWFyZ2luLXNtYWxsIHtcbiAgbWFyZ2luLXRvcDogMy42NjY2NjY2NjY3cmVtO1xufVxuLnRpdGxlLS1saWdodCB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLnRpdGxlLS1wcm9kdWN0LXNldC1kZXRhaWxzIHtcbiAgZm9udC1zaXplOiAxLjQ2NjY2NjY2NjdyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC50aXRsZS0tcHJvZHVjdC1zZXQtZGV0YWlscyB7XG4gICAgZm9udC1zaXplOiAzLjMzMzMzMzMzMzNyZW07XG4gIH1cbn1cbi50aXRsZS0tbW9iaWxlLXRvZ2dsZXItc2VjdGlvbiB7XG4gIG1hcmdpbi1ib3R0b206IDEuNnJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgY29sb3I6ICM2ZjZmNmY7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC50aXRsZS0tbW9iaWxlLXRvZ2dsZXItc2VjdGlvbiB7XG4gICAgZm9udC1zaXplOiAxLjEzMzMzMzMzMzNyZW07XG4gICAgcGFkZGluZy1sZWZ0OiAxLjkzMzMzMzMzMzNyZW07XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG4gIC50aXRsZS0tbW9iaWxlLXRvZ2dsZXItc2VjdGlvbjo6YmVmb3JlLCAudGl0bGUtLW1vYmlsZS10b2dnbGVyLXNlY3Rpb246OmFmdGVyIHtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIHRvcDogNTAlO1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgIHdpZHRoOiAwLjY2NjY2NjY2NjdyZW07XG4gICAgaGVpZ2h0OiAwLjEzMzMzMzMzMzNyZW07XG4gICAgYmFja2dyb3VuZDogIzZmNmY2ZjtcbiAgfVxuICAudGl0bGUtLW1vYmlsZS10b2dnbGVyLXNlY3Rpb246OmFmdGVyIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKSByb3RhdGUoOTBkZWcpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpIHJvdGF0ZSg5MGRlZyk7XG4gIH1cbiAgLnRpdGxlLS1tb2JpbGUtdG9nZ2xlci1zZWN0aW9uLmFjdGl2ZTo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi50aXRsZS0tbGluayB7XG4gIGNvbG9yOiAjNmY2ZjZmO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAudGl0bGUtLWxpbmsge1xuICAgIG1hcmdpbi1sZWZ0OiAxLjMzMzMzMzMzMzNyZW07XG4gIH1cbn1cbi50aXRsZS0td2FybmluZyB7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBsaW5lLWhlaWdodDogMy40NjY2NjY2NjY3cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDc1LCA3NSwgNzcsIDAuMSk7XG4gIG1hcmdpbjogMCAtMXJlbSAwLjUzMzMzMzMzMzNyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC50aXRsZS0td2FybmluZyB7XG4gICAgZm9udC1zaXplOiAxLjA2NjY2NjY2NjdyZW07XG4gICAgbWFyZ2luOiAwIDAgMC41MzMzMzMzMzMzcmVtO1xuICB9XG59XG4udGl0bGUtLXJldmlldy1zdWJ0aXRsZSB7XG4gIG1hcmdpbi1ib3R0b206IDEuMzMzMzMzMzMzM3JlbTtcbiAgZm9udC1zaXplOiAxLjJyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIGNvbG9yOiAjNmY2ZjZmO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC50aXRsZS0tcmV2aWV3LXN1YnRpdGxlIHtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGZvbnQtc2l6ZTogMS42cmVtO1xuICB9XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5hY3Rpb24tYmFyIHtcbiAgbWFyZ2luLXRvcDogMS4wNjY2NjY2NjY3cmVtO1xuICBtYXJnaW4tYm90dG9tOiAxLjA2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5hY3Rpb24tYmFyIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgICAgICAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgfVxufVxuLmFjdGlvbi1iYXItLWZpcnN0IHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5hY3Rpb24tYmFyLS1iaWcge1xuICBtYXJnaW4tdG9wOiAzLjJyZW07XG59XG4uYWN0aW9uLWJhci0tc21hbGwge1xuICBtYXJnaW4tdG9wOiAxLjA2NjY2NjY2NjdyZW07XG4gIG1hcmdpbi1ib3R0b206IDAuNTMzMzMzMzMzM3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLmFjdGlvbi1iYXItLW5hcnJvdyB7XG4gICAgbWF4LXdpZHRoOiA0Ni42NjY2NjY2NjY3cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuYWN0aW9uLWJhci0tbmFycm93IHtcbiAgICBtYXgtd2lkdGg6IDMzLjMzMzMzMzMzMzNyZW07XG4gIH1cbn1cbi5hY3Rpb24tYmFyX190aXRsZSB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleDogMTtcbiAgICAgICAgICBmbGV4OiAxO1xufVxuLmFjdGlvbi1iYXJfX3RpdGxlLS1zbWFsbCB7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xuICBsaW5lLWhlaWdodDogMS42O1xufVxuLmFjdGlvbi1iYXJfX3RpdGxlLS1taWRkbGUge1xuICBmb250LXNpemU6IDEuNDY2NjY2NjY2N3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLmFjdGlvbi1iYXJfX2FjdGlvbnMge1xuICAgIC13ZWJraXQtYm94LWZsZXg6IDA7XG4gICAgICAgIC1tcy1mbGV4OiBub25lO1xuICAgICAgICAgICAgZmxleDogbm9uZTtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgICAgICAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxufVxuLmFjdGlvbi1iYXJfX2FjdGlvbiB7XG4gIG1hcmdpbi10b3A6IDAuNXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLmFjdGlvbi1iYXJfX2FjdGlvbiB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tbGVmdDogMC41MzMzMzMzMzMzcmVtO1xuICAgIHdpZHRoOiBhdXRvO1xuICB9XG59XG4uYWN0aW9uLWJhcl9faWNvbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMC44NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDAuODY2NjY2NjY2N3JlbTtcbiAgbWFyZ2luLXJpZ2h0OiAwLjY2NjY2NjY2NjdyZW07XG4gIC13ZWJraXQtYm94LWZsZXg6IDA7XG4gICAgICAtbXMtZmxleDogbm9uZTtcbiAgICAgICAgICBmbGV4OiBub25lO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uYWpheC1hZGQtdG8tY2FydF9fYnV0dG9uIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uYWpheC1sb2FkZXIge1xuICAtd2Via2l0LXRyYW5zaXRpb246IHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQsIG9wYWNpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQsIG9wYWNpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIHJpZ2h0OiAwO1xuICBwYWRkaW5nOiAwLjVyZW07XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjQwLCAyNDAsIDI0MCwgMC41KTtcbiAgei1pbmRleDogNzUwO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7XG59XG4uYWpheC1sb2FkZXJfX3NwaW5uZXIge1xuICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBzcGluLXRvO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiBzcGluLXRvO1xuICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogMXM7XG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAxcztcbiAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcbiAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcbiAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7XG4gICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xufVxuLmFqYXgtbG9hZGVyX19sYWJlbCB7XG4gIG1hcmdpbi1sZWZ0OiAwLjVyZW07XG59XG4uYWpheC1sb2FkZXItLXNvbGlkLWJnIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbi5hamF4LWxvYWRlci0tYmlnIC5hamF4LWxvYWRlcl9fbGFiZWwge1xuICBmb250LXNpemU6IDIuNHJlbTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmFsZXJ0IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIHBhZGRpbmc6IDEuMjVyZW0gMXJlbTtcbiAgbWFyZ2luOiAwLjVyZW0gMDtcbiAgYmFja2dyb3VuZDogI2VhZjFmYTtcbiAgY29sb3I6ICMzMzMzMzM7XG59XG4uYWxlcnRfX2ljb24ge1xuICBjb2xvcjogIzAwNjRiNDtcbiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgbWFyZ2luOiAwIDFyZW0gMCAwO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uYXV0b2NvbXBsZXRlLWZvcm0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uYXV0b2NvbXBsZXRlLWZvcm1fX2ZpZWxkIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiA3MDI7XG59XG4uYXV0b2NvbXBsZXRlLWZvcm1fX2lucHV0IHtcbiAgcGFkZGluZzogMXJlbSAyLjRyZW0gMXJlbSAxLjJyZW07XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMThweCAxOHB4IDAgcmdiYSg3NSwgNzUsIDc3LCAwLjIpLCAwIDNweCAzcHggMCByZ2JhKDc1LCA3NSwgNzcsIDAuMik7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAxOHB4IDE4cHggMCByZ2JhKDc1LCA3NSwgNzcsIDAuMiksIDAgM3B4IDNweCAwIHJnYmEoNzUsIDc1LCA3NywgMC4yKTtcbn1cbi5hdXRvY29tcGxldGUtZm9ybV9faW5wdXQtLWFjdGl2ZSB7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHggMTBweCAwIDA7XG59XG4uYXV0b2NvbXBsZXRlLWZvcm1fX3N1Z2dlc3Rpb24ge1xuICBtYXJnaW46IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAxMDAlO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgcGFkZGluZzogMC42NjY2NjY2NjY3cmVtIDEuMnJlbTtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGxpbmUtaGVpZ2h0OiAyO1xuICBib3JkZXItcmFkaXVzOiAwIDAgMTBweCAxMHB4O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMThweCAxOHB4IDAgcmdiYSg3NSwgNzUsIDc3LCAwLjIpLCAwIDNweCAzcHggMCByZ2JhKDc1LCA3NSwgNzcsIDAuMik7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAxOHB4IDE4cHggMCByZ2JhKDc1LCA3NSwgNzcsIDAuMiksIDAgM3B4IDNweCAwIHJnYmEoNzUsIDc1LCA3NywgMC4yKTtcbiAgbWF4LWhlaWdodDogMzByZW07XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgei1pbmRleDogNzAzO1xufVxuLmF1dG9jb21wbGV0ZS1mb3JtX19jbGVhbi1idXR0b24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgcGFkZGluZy1yaWdodDogMC44cmVtO1xufVxuLmF1dG9jb21wbGV0ZS1mb3JtX19jbGVhbi1idXR0b24gc3ZnIHtcbiAgd2lkdGg6IDEuMzMzMzMzMzMzM3JlbTtcbiAgaGVpZ2h0OiAxLjMzMzMzMzMzMzNyZW07XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5icmVhZGNydW1iLXN0ZXAge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtZmFtaWx5OiBcIkxhdG9cIiwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgY29sb3I6ICNiMmIyYjI7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICAtbXMtd29yZC1icmVhazogYnJlYWstYWxsO1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWNsYXJhdGlvbi1ibG9jay1uby1kdXBsaWNhdGUtcHJvcGVydGllcyAqL1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAtbXMtaHlwaGVuczogYXV0bztcbiAgICAgIGh5cGhlbnM6IGF1dG87XG59XG4uYnJlYWRjcnVtYi1zdGVwOmxhc3QtY2hpbGQgLmJyZWFkY3J1bWItc3RlcF9fbGluayB7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGNvbG9yOiAjMDAwO1xufVxuLmJyZWFkY3J1bWItc3RlcDpsYXN0LWNoaWxkIC5icmVhZGNydW1iLXN0ZXBfX2xpbms6aG92ZXIge1xuICBjb2xvcjogI2ZlY2MwMDtcbn1cbi5icmVhZGNydW1iLXN0ZXAtLXByb2dyZXNzLXN0ZXAsIC5icmVhZGNydW1iLXN0ZXAtLXByb2dyZXNzLWNvbXBsZXRlIHtcbiAgZm9udC1zaXplOiAwLjY2NjY2NjY2NjdyZW07XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIG1hcmdpbjogMCAxcmVtO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU0OXB4KSB7XG4gIC5icmVhZGNydW1iLXN0ZXAtLXByb2dyZXNzLXN0ZXAsIC5icmVhZGNydW1iLXN0ZXAtLXByb2dyZXNzLWNvbXBsZXRlIHtcbiAgICBtaW4taGVpZ2h0OiAyLjkzMzMzMzMzMzNyZW07XG4gIH1cbiAgLmJyZWFkY3J1bWItc3RlcC0tcHJvZ3Jlc3Mtc3RlcCAuYnJlYWRjcnVtYi1zdGVwX19saW5rLCAuYnJlYWRjcnVtYi1zdGVwLS1wcm9ncmVzcy1jb21wbGV0ZSAuYnJlYWRjcnVtYi1zdGVwX19saW5rIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLmJyZWFkY3J1bWItc3RlcC0tcHJvZ3Jlc3Mtc3RlcCwgLmJyZWFkY3J1bWItc3RlcC0tcHJvZ3Jlc3MtY29tcGxldGUge1xuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5icmVhZGNydW1iLXN0ZXAtLXByb2dyZXNzLXN0ZXAsIC5icmVhZGNydW1iLXN0ZXAtLXByb2dyZXNzLWNvbXBsZXRlIHtcbiAgICBtYXJnaW46IDAgMS45MzMzMzMzMzMzcmVtO1xuICB9XG59XG4uYnJlYWRjcnVtYi1zdGVwLS1wcm9ncmVzcy1zdGVwOm5vdCg6bGFzdC1jaGlsZCk6OmFmdGVyLCAuYnJlYWRjcnVtYi1zdGVwLS1wcm9ncmVzcy1jb21wbGV0ZTpub3QoOmxhc3QtY2hpbGQpOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMTAwJTtcbiAgdG9wOiAwLjRyZW07XG4gIHdpZHRoOiAyLjRyZW07XG4gIG1hcmdpbi1sZWZ0OiAtMC4ycmVtO1xuICBoZWlnaHQ6IDAuMDY2NjY2NjY2N3JlbTtcbiAgYmFja2dyb3VuZDogcmdiYSgyMDgsIDIwOCwgMjA4LCAwLjgpO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAuYnJlYWRjcnVtYi1zdGVwLS1wcm9ncmVzcy1zdGVwOm5vdCg6bGFzdC1jaGlsZCk6OmFmdGVyLCAuYnJlYWRjcnVtYi1zdGVwLS1wcm9ncmVzcy1jb21wbGV0ZTpub3QoOmxhc3QtY2hpbGQpOjphZnRlciB7XG4gICAgaGVpZ2h0OiAwLjEzMzMzMzMzMzNyZW07XG4gICAgdG9wOiAwLjhyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmJyZWFkY3J1bWItc3RlcC0tcHJvZ3Jlc3Mtc3RlcDpub3QoOmxhc3QtY2hpbGQpOjphZnRlciwgLmJyZWFkY3J1bWItc3RlcC0tcHJvZ3Jlc3MtY29tcGxldGU6bm90KDpsYXN0LWNoaWxkKTo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi5icmVhZGNydW1iLXN0ZXAtLXByb2dyZXNzLXN0ZXAuYnJlYWRjcnVtYi1zdGVwLS1hY3RpdmUsIC5icmVhZGNydW1iLXN0ZXAtLXByb2dyZXNzLWNvbXBsZXRlLmJyZWFkY3J1bWItc3RlcC0tYWN0aXZlIHtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmJyZWFkY3J1bWItc3RlcC0tcHJvZ3Jlc3Mtc3RlcC5icmVhZGNydW1iLXN0ZXAtLWFjdGl2ZSwgLmJyZWFkY3J1bWItc3RlcC0tcHJvZ3Jlc3MtY29tcGxldGUuYnJlYWRjcnVtYi1zdGVwLS1hY3RpdmUge1xuICAgIGJvcmRlci1ib3R0b206IDAuMDY2NjY2NjY2N3JlbSBzb2xpZCAjOTI5MjkyO1xuICB9XG59XG4uYnJlYWRjcnVtYi1zdGVwLS1wcm9ncmVzcy1jb21wbGV0ZSB7XG4gIGNvbG9yOiAjZmVjYzAwO1xufVxuLmJyZWFkY3J1bWItc3RlcC0tcHJvZ3Jlc3MtY29tcGxldGU6bm90KDpsYXN0LWNoaWxkKTo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kOiAjZmVjYzAwO1xufVxuLmJyZWFkY3J1bWItc3RlcC0tcHJvZ3Jlc3MtY29tcGxldGUgLmJyZWFkY3J1bWItc3RlcF9fbGluayB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuYnJlYWRjcnVtYi1zdGVwLS1wcm9ncmVzcy1jb21wbGV0ZSAuYnJlYWRjcnVtYi1zdGVwX19saW5rIHtcbiAgICBtYXJnaW4tbGVmdDogMC4yNjY2NjY2NjY3cmVtO1xuICB9XG59XG4uYnJlYWRjcnVtYi1zdGVwLS1wcm9ncmVzcy1jb21wbGV0ZSAuYnJlYWRjcnVtYi1zdGVwX19udW1iZXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuLmJyZWFkY3J1bWItc3RlcF9fc2VwYXJhdG9yIHtcbiAgbWFyZ2luLWxlZnQ6IDAuMjY2NjY2NjY2N3JlbTtcbiAgbWFyZ2luLXJpZ2h0OiAwLjI2NjY2NjY2NjdyZW07XG4gIGNvbG9yOiAjYjJiMmIyO1xufVxuLmJyZWFkY3J1bWItc3RlcF9fY2FydCBzdmcge1xuICB3aWR0aDogMS42NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDEuNjY2NjY2NjY2N3JlbTtcbn1cbi5icmVhZGNydW1iLXN0ZXAtLWFjdGl2ZSB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGJvcmRlci1ib3R0b206IDAuMDY2NjY2NjY2N3JlbSBzb2xpZCAjOTI5MjkyO1xuICBjb2xvcjogIzkyOTI5Mjtcbn1cbi5icmVhZGNydW1iLXN0ZXBfX2NoZWNrZWQge1xuICB3aWR0aDogMC44NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDAuODY2NjY2NjY2N3JlbTtcbiAgbGluZS1oZWlnaHQ6IDAuNzMzMzMzMzMzM3JlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZlY2MwMDtcbiAgY29sb3I6ICNmZmY7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgbWFyZ2luLWJvdHRvbTogMC4xMzMzMzMzMzMzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAuYnJlYWRjcnVtYi1zdGVwX19jaGVja2VkIHtcbiAgICB3aWR0aDogMS4ycmVtO1xuICAgIGhlaWdodDogMS4ycmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxcmVtO1xuICAgIG1hcmdpbjogMC4ycmVtIDAgMC4yNjY2NjY2NjY3cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5icmVhZGNydW1iLXN0ZXBfX2NoZWNrZWQge1xuICAgIG1hcmdpbjogMCAwIDAgMC4yNjY2NjY2NjY3cmVtO1xuICB9XG59XG4uYnJlYWRjcnVtYi1zdGVwX19udW1iZXIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLWJvdHRvbTogMC4xMzMzMzMzMzMzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuYnJlYWRjcnVtYi1zdGVwX19udW1iZXIge1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG4uYnJlYWRjcnVtYi1zdGVwX19ob2xkZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogcmV2ZXJzZTtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuYnJlYWRjcnVtYi1zdGVwX19ob2xkZXIge1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICB9XG59XG4uYnJlYWRjcnVtYi1zdGVwLS1wcm9ncmVzcy1jb21wbGV0ZTpmaXJzdC1jaGlsZCAuYnJlYWRjcnVtYi1zdGVwX19ob2xkZXIgLmJyZWFkY3J1bWItc3RlcF9fbGluazo6YmVmb3JlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLmJyZWFkY3J1bWItc3RlcDpsYXN0LWNoaWxkIC5icmVhZGNydW1iLXN0ZXBfX2xpbmsge1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLmJyZWFkY3J1bWItc3RlcDpsYXN0LWNoaWxkIC5icmVhZGNydW1iLXN0ZXBfX2xpbms6aG92ZXIge1xuICBjb2xvcjogIzAwMDtcbn1cblxuLmJyZWFkY3J1bWItYnV0dG9uX19sYWJlbCB7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuYnJlYWRjcnVtYi1idXR0b25fX2xhYmVsIHtcbiAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgfVxufVxuLmJyZWFkY3J1bWItYnV0dG9uLS1jdXJzb3ItZGVmYXVsdCB7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNhcmQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uY2FyZF9fY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLWJvdHRvbTogMi41cmVtO1xufVxuLmNhcmRfX2FjdGlvbnMtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDAuNXJlbTtcbiAgbGVmdDogMC41cmVtO1xuICByaWdodDogMC41cmVtO1xuICBtYXJnaW46IGF1dG87XG59XG4uY2FyZC0tc3RyZXRjaCB7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5jYXJkX19jb250YWluZXItLWNhdGVnb3J5LWxpc3QtaXRlbSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNhcnQtY291bnRlcl9fY29udGVudCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBoZWlnaHQ6IDIuNTMzMzMzMzMzM3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNhcnQtY291bnRlcl9fY29udGVudCB7XG4gICAgLXdlYmtpdC1ib3gtYWxpZ246IHN0YXJ0O1xuICAgICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgfVxufVxuLmNhcnQtY291bnRlcl9fbGFiZWwge1xuICBkaXNwbGF5OiBub25lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY2FydC1jb3VudGVyX19sYWJlbCB7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICB9XG59XG4uY2FydC1jb3VudGVyX19sYWJlbC0tbW9iaWxlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBwYWRkaW5nLWxlZnQ6IDAuMjY2NjY2NjY2N3JlbTtcbiAgcGFkZGluZy1yaWdodDogMC4xMzMzMzMzMzMzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY2FydC1jb3VudGVyX19sYWJlbC0tbW9iaWxlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jYXJ0LWNvdW50ZXJfX3F1YW50aXR5IHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgbWluLXdpZHRoOiAxLjA2NjY2NjY2NjdyZW07XG4gICAgaGVpZ2h0OiAxLjA2NjY2NjY2NjdyZW07XG4gICAgYmFja2dyb3VuZDogI2ZlY2MwMDtcbiAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LXNpemU6IDAuNzMzMzMzMzMzM3JlbTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjA2NjY2NjY2NjdyZW07XG4gICAgbWFyZ2luOiAwLjY2NjY2NjY2NjdyZW0gMCAwIDAuNHJlbTtcbiAgfVxufVxuLmNhcnQtY291bnRlcl9fcXVhbnRpdHk6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiKFwiO1xufVxuLmNhcnQtY291bnRlcl9fcXVhbnRpdHk6OmFmdGVyIHtcbiAgY29udGVudDogXCIpXCI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jYXJ0LWNvdW50ZXJfX3F1YW50aXR5OjpiZWZvcmUsIC5jYXJ0LWNvdW50ZXJfX3F1YW50aXR5OjphZnRlciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLmNhcnQtY291bnRlcl9fcXVhbnRpdHktLWhpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5jYXJ0LWl0ZW1zLWNvdW50ZXIge1xuICBoZWlnaHQ6IDEwMCU7XG59XG4uY2FydC1pdGVtcy1jb3VudGVyX190ZXh0IHtcbiAgZGlzcGxheTogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5jYXJ0LWl0ZW1zLWNvdW50ZXJfX3RleHQge1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICB9XG59XG4uY2FydC1pdGVtcy1jb3VudGVyX19xdWFudGl0eSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB3aWR0aDogMS40NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDEuNDY2NjY2NjY2N3JlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRiNGI0ZDtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgYm9yZGVyLXJhZGl1czogOTk5OXB4O1xuICBjb2xvcjogI2ZmZjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDAuNzMzMzMzMzMzM3JlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDAuMjVyZW07XG4gIHJpZ2h0OiAtMC43NXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMzc1cHgpIHtcbiAgLmNhcnQtaXRlbXMtY291bnRlcl9fcXVhbnRpdHkge1xuICAgIG1hcmdpbjogMDtcbiAgICByaWdodDogLTAuNjY2NjY2NjY2N3JlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAuY2FydC1pdGVtcy1jb3VudGVyX19xdWFudGl0eSB7XG4gICAgcmlnaHQ6IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNhcnQtaXRlbXMtY291bnRlcl9fcXVhbnRpdHkge1xuICAgIHJpZ2h0OiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuY2FydC1pdGVtcy1jb3VudGVyX19xdWFudGl0eSB7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwLjc1cmVtO1xuICB9XG59XG4uY2FydC1pdGVtcy1jb3VudGVyOmhvdmVyIC5jYXJ0LWl0ZW1zLWNvdW50ZXJfX3F1YW50aXR5IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZlY2MwMDtcbiAgY29sb3I6ICMwMDA7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uZmxhc2gtbWVzc2FnZSB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIG9wYWNpdHk6IDA7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogdmlzaWJpbGl0eSA1MDBtcyBlYXNlLWluLW91dCwgb3BhY2l0eSA1MDBtcyBlYXNlLWluLW91dCwgbWF4LWhlaWdodCA1MDBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSA1MDBtcyBlYXNlLWluLW91dCwgb3BhY2l0eSA1MDBtcyBlYXNlLWluLW91dCwgbWF4LWhlaWdodCA1MDBtcyBlYXNlLWluLW91dDtcbiAgbWF4LWhlaWdodDogMDtcbiAgb3ZlcmZsb3cteTogaGlkZGVuO1xuICBmb250LXNpemU6IDE1cHgxO1xuICBmb250LWZhbWlseTogXCJMYXRvXCIsIHNhbnMtc2VyaWY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWNjMDA7XG59XG4uZmxhc2gtbWVzc2FnZV9fY29udGVudCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICB3aWR0aDogMTAwJTtcbn1cbi5mbGFzaC1tZXNzYWdlX19jb250ZW50OjphZnRlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uZmxhc2gtbWVzc2FnZV9fdGV4dCB7XG4gIHBhZGRpbmctcmlnaHQ6IDFyZW07XG59XG4uZmxhc2gtbWVzc2FnZV9fc3RhdGljLWxpbmsge1xuICBjb2xvcjogcmdiYSgxMTEsIDExMSwgMTExLCAwLjQpO1xuICAtbXMtZmxleC1uZWdhdGl2ZTogMDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xufVxuLmZsYXNoLW1lc3NhZ2VfX21lc3NhZ2Uge1xuICBwYWRkaW5nOiAxLjI1cmVtIDFyZW07XG4gIGNvbG9yOiAjZmZmO1xufVxuLmZsYXNoLW1lc3NhZ2UtLXNob3cge1xuICBwb2ludGVyLWV2ZW50czogYWxsO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBvcGFjaXR5OiAxO1xuICBtYXgtaGVpZ2h0OiA4cmVtO1xufVxuLmZsYXNoLW1lc3NhZ2UtLWluZm8ge1xuICBjb2xvcjogIzAwMDtcbn1cbi5mbGFzaC1tZXNzYWdlLS1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAxOTAzOTtcbn1cbi5mbGFzaC1tZXNzYWdlLS1zdWNjZXNzLWxpZ2h0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FiZDE4Yjtcbn1cbi5mbGFzaC1tZXNzYWdlLS13YXJuaW5nIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U4OWMzMDtcbn1cbi5mbGFzaC1tZXNzYWdlLS1hbGVydCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlMzIyMTM7XG59XG4uZmxhc2gtbWVzc2FnZS0taW5mbyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWNjMDA7XG59XG4uZmxhc2gtbWVzc2FnZS0tbmV1dHJhbCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM5MjkyOTI7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5mb3JtIC5mb3JtIHtcbiAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDAuNXJlbTtcbn1cbi5mb3JtX19maWVsZHMge1xuICBtYXJnaW4tbGVmdDogLTAuNXJlbTtcbiAgbWFyZ2luLXJpZ2h0OiAtMC41cmVtO1xufVxuLmZvcm1fX2ZpZWxkIHtcbiAgcGFkZGluZzogMC41cmVtO1xufVxuLmZvcm1fX2FjdGlvbnMge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbi5mb3JtX19hY3Rpb24ge1xuICBtYXJnaW4tdG9wOiAwLjVyZW07XG4gIG1hcmdpbi1sZWZ0OiAwLjVyZW07XG59XG4uZm9ybS0taW5saW5lIC5mb3JtX19jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1mbG93OiByb3cgd3JhcDtcbiAgICAgICAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAtd2Via2l0LWJveC1hbGlnbjogZW5kO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGVuZDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG59XG4uZm9ybS0taW5saW5lIC5mb3JtX19maWVsZHMge1xuICBmbG9hdDogbGVmdDtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xuICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XG4gICAgICBmbGV4LWJhc2lzOiBhdXRvO1xufVxuLmZvcm0tLWlubGluZSAuZm9ybV9fYWN0aW9ucyB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDA7XG4gICAgICAtbXMtZmxleC1wb3NpdGl2ZTogMDtcbiAgICAgICAgICBmbGV4LWdyb3c6IDA7XG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xuICAgICAgZmxleC1iYXNpczogYXV0bztcbn1cbi5mb3JtLS1pbmxpbmUgLmZvcm1fX2ZpZWxkIHtcbiAgcGFkZGluZy1ib3R0b206IDA7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG59XG4uZm9ybS0tZXh0ZW5kIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbisgLmZvcm1fX2ZpZWxkIHtcbiAgbWFyZ2luLXRvcDogMC41cmVtO1xufVxuLmZvcm1fX2ZpZWxkLS1zZWN0aW9uIHtcbiAgbWFyZ2luLXRvcDogMy4ycmVtO1xuICB3aWR0aDogMTAwJTtcbn1cbi5mb3JtLS1yZXZlcnNlLWFjdGlvbnMgLmZvcm1fX2FjdGlvbnMge1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogcmV2ZXJzZTtcbiAgICAgIC1tcy1mbGV4LWZsb3c6IHJvdy1yZXZlcnNlO1xuICAgICAgICAgIGZsZXgtZmxvdzogcm93LXJldmVyc2U7XG59XG4uZm9ybS0tc3ByZWFkLWFjdGlvbnMgLmZvcm1fX2FjdGlvbnMge1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHdpZHRoOiAxMDAlO1xufVxuLmZvcm0tLXJpZ2h0LWFjdGlvbnMgLmZvcm1fX2FjdGlvbnMge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgd2lkdGg6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5mb3JtLS1yaWdodC1hY3Rpb25zIC5mb3JtX19hY3Rpb25zIHtcbiAgICAtd2Via2l0LWJveC1wYWNrOiBlbmQ7XG4gICAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIH1cbn1cbi5mb3JtX19hY3Rpb25zIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZm9ybV9fYWN0aW9ucyB7XG4gICAgbWFyZ2luLXRvcDogMS4wNjY2NjY2NjY3cmVtO1xuICAgIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgfVxufVxuLmZvcm1fX2FjdGlvbiB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDA7XG4gICAgICAtbXMtZmxleDogbm9uZTtcbiAgICAgICAgICBmbGV4OiBub25lO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwLjY2NjY2NjY2NjdyZW0gMCAwIDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5mb3JtX19hY3Rpb24ge1xuICAgIHdpZHRoOiBhdXRvO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5mb3JtX19hY3Rpb24tLWV4cGFuZC1zbS1tZCB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgbWFyZ2luOiAwLjY2NjY2NjY2NjdyZW0gMS4wNjY2NjY2NjY3cmVtIDAgMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZm9ybV9fYWN0aW9uLS1leHBhbmQtc20tbWQge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gIH1cbn1cbi5mb3JtX19hY3Rpb24tLXByaW1hcnkge1xuICAtd2Via2l0LWJveC1vcmRpbmFsLWdyb3VwOiAwO1xuICAgICAgLW1zLWZsZXgtb3JkZXI6IC0xO1xuICAgICAgICAgIG9yZGVyOiAtMTtcbn1cbi5mb3JtX19hY3Rpb24tLXNtLWxnLWZpcnN0IHtcbiAgLXdlYmtpdC1ib3gtb3JkaW5hbC1ncm91cDogMDtcbiAgICAgIC1tcy1mbGV4LW9yZGVyOiAtMTtcbiAgICAgICAgICBvcmRlcjogLTE7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5mb3JtX19hY3Rpb24tLXNtLWxnLWZpcnN0IHtcbiAgICAtd2Via2l0LWJveC1vcmRpbmFsLWdyb3VwOiAxO1xuICAgICAgICAtbXMtZmxleC1vcmRlcjogMDtcbiAgICAgICAgICAgIG9yZGVyOiAwO1xuICB9XG59XG4uZm9ybV9fYWN0aW9uLS1zbS1tZC1maXJzdCB7XG4gIC13ZWJraXQtYm94LW9yZGluYWwtZ3JvdXA6IDA7XG4gICAgICAtbXMtZmxleC1vcmRlcjogLTE7XG4gICAgICAgICAgb3JkZXI6IC0xO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAuZm9ybV9fYWN0aW9uLS1zbS1tZC1maXJzdCB7XG4gICAgLXdlYmtpdC1ib3gtb3JkaW5hbC1ncm91cDogMTtcbiAgICAgICAgLW1zLWZsZXgtb3JkZXI6IDA7XG4gICAgICAgICAgICBvcmRlcjogMDtcbiAgfVxufVxuLmZvcm1fX2FjdGlvbi0tbGluayB7XG4gIHdpZHRoOiBhdXRvO1xuICBtYXJnaW46IDAuNjY2NjY2NjY2N3JlbSBhdXRvIDA7XG4gIGZvbnQtc2l6ZTogMC44NjY2NjY2NjY3cmVtO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmZvcm1fX2FjdGlvbi0tbGluayB7XG4gICAgbWFyZ2luOiAwIDEuMDY2NjY2NjY2N3JlbSAwIDA7XG4gICAgZm9udC1zaXplOiAxLjA2NjY2NjY2NjdyZW07XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB9XG59XG4uZm9ybV9fdGl0bGUtZGVzY3JpcHRpb24ge1xuICBjb2xvcjogI2QwZDBkMDtcbiAgbWFyZ2luOiAtMC41MzMzMzMzMzMzcmVtIDAgMS4wNjY2NjY2NjY3cmVtO1xufVxuLmZvcm0tLW5hcnJvdyAuZm9ybV9fY29udGFpbmVyIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5mb3JtLS1uYXJyb3cgLmZvcm1fX2NvbnRhaW5lciB7XG4gICAgbWF4LXdpZHRoOiA0Ni42NjY2NjY2NjY3cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuZm9ybS0tbmFycm93IC5mb3JtX19jb250YWluZXIge1xuICAgIG1heC13aWR0aDogMzMuMzMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLmZvcm0tLXN1YnNjcmlwdGlvbiB7XG4gIHBhZGRpbmctYm90dG9tOiAyLjEzMzMzMzMzMzNyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5mb3JtLS1zdWJzY3JpcHRpb24ge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG4uZm9ybS0tc3Vic2NyaXB0aW9uIC5mb3JtX19jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uZm9ybS0tc3Vic2NyaXB0aW9uIC5mb3JtX19maWVsZHMsXG4uZm9ybS0tc3Vic2NyaXB0aW9uIC5mb3JtX19hY3Rpb25zLFxuLmZvcm0tLXN1YnNjcmlwdGlvbiAuZm9ybV9fYWN0aW9uIHtcbiAgbWFyZ2luOiAwO1xufVxuLmZvcm0tLXN1YnNjcmlwdGlvbiAuZm9ybV9fZmllbGQge1xuICBwYWRkaW5nOiAwO1xufVxuLmZvcm0tLXN1YnNjcmlwdGlvbiAuZm9ybV9fYWN0aW9ucyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbn1cbi5mb3JtLS1zdWJzY3JpcHRpb24gLmxhYmVsIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5mb3JtLS1zdWJzY3JpcHRpb24gLmlucHV0IHtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm9yZGVyOiBub25lO1xuICBib3JkZXItYm90dG9tOiAycHggc29saWQgIzkyOTI5MjtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgZm9udC1zaXplOiAxLjA2NjY2NjY2NjdyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjMzMzMzMzMzMzNyZW07XG4gIGxldHRlci1zcGFjaW5nOiAwLjAxMzMzMzMzMzNyZW07XG4gIGNvbG9yOiAjOTI5MjkyO1xuICBwYWRkaW5nOiAwLjY2NjY2NjY2NjdyZW0gMi40cmVtIDAuNjY2NjY2NjY2N3JlbSAwO1xufVxuLmZvcm0tLXN1YnNjcmlwdGlvbiAuaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICBjb2xvcjogIzkyOTI5Mjtcbn1cbi5mb3JtLS1zdWJzY3JpcHRpb24gLmlucHV0OjotbW96LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6ICM5MjkyOTI7XG59XG4uZm9ybS0tc3Vic2NyaXB0aW9uIC5pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICBjb2xvcjogIzkyOTI5Mjtcbn1cbi5mb3JtLS1zdWJzY3JpcHRpb24gLmlucHV0OjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICBjb2xvcjogIzkyOTI5Mjtcbn1cbi5mb3JtLS1zdWJzY3JpcHRpb24gLmlucHV0OjpwbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjOTI5MjkyO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZm9ybS0tc3Vic2NyaXB0aW9uIC5pbnB1dCB7XG4gICAgZm9udC1zaXplOiAxLjJyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNTMzMzMzMzMzM3JlbTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wMThyZW07XG4gICAgcGFkZGluZzogMC44NjY2NjY2NjY3cmVtIDMuMDY2NjY2NjY2N3JlbSAxLjA2NjY2NjY2NjdyZW0gMDtcbiAgfVxufVxuLmZvcm0tLXN1YnNjcmlwdGlvbiAuYnV0dG9uIHtcbiAgY29sb3I6ICM5MjkyOTI7XG4gIG1pbi1oZWlnaHQ6IDIuOHJlbTtcbiAgcGFkZGluZy1yaWdodDogMC42NjY2NjY2NjY3cmVtO1xuICBwYWRkaW5nLWJvdHRvbTogMC42NjY2NjY2NjY3cmVtO1xufVxuLmZvcm0tLXN1YnNjcmlwdGlvbiAuYnV0dG9uOmhvdmVyLCAuZm9ybS0tc3Vic2NyaXB0aW9uIC5idXR0b246Zm9jdXMge1xuICBjb2xvcjogI2IyYjJiMjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmZvcm0tLXN1YnNjcmlwdGlvbiAuYnV0dG9uIHtcbiAgICBtaW4taGVpZ2h0OiAzLjZyZW07XG4gICAgcGFkZGluZy1yaWdodDogMS40NjY2NjY2NjY3cmVtO1xuICAgIHBhZGRpbmctYm90dG9tOiAwLjY2NjY2NjY2NjdyZW07XG4gIH1cbn1cbi5mb3JtLS1zdWJzY3JpcHRpb24gLmljb24ge1xuICB3aWR0aDogMC44cmVtO1xuICBoZWlnaHQ6IDAuOHJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmZvcm0tLXN1YnNjcmlwdGlvbiAuaWNvbiB7XG4gICAgd2lkdGg6IDEuMDY2NjY2NjY2N3JlbTtcbiAgICBoZWlnaHQ6IDEuMDY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLmZvcm0tLWJyb3dzZS1maWxlIC5mb3JtX19maWVsZDpub3QoOmZpcnN0LW9mLXR5cGUpLFxuLmZvcm0tLWJyb3dzZS1maWxlIC5mb3JtX19hY3Rpb25zLFxuLmZvcm0tLWJyb3dzZS1maWxlIC5pbnB1dCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uZm9ybS0tdGV4dC1vcmRlciAuZm9ybV9fZmllbGQge1xuICBwYWRkaW5nLXRvcDogMDtcbn1cbi5mb3JtLS10ZXh0LW9yZGVyIC5mb3JtX19hY3Rpb25zIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5mb3JtLS10ZXh0LW9yZGVyIC50ZXh0YXJlYSB7XG4gIG1pbi1oZWlnaHQ6IDcuOTMzMzMzMzMzM3JlbTtcbiAgcGFkZGluZzogMS4xMzMzMzMzMzMzcmVtIDEuMzMzMzMzMzMzM3JlbSAxLjJyZW07XG4gIGZvbnQtc2l6ZTogMC44NjY2NjY2NjY3cmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBjb2xvcjogI2IyYjJiMjtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgYm9yZGVyOiBub25lO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMC42NjY2NjY2NjY3cmVtIDAuNjY2NjY2NjY2N3JlbSAwIHJnYmEoNzUsIDc1LCA3NywgMC4yKSwgMCAwLjJyZW0gMC4ycmVtIDAgcmdiYSg3NSwgNzUsIDc3LCAwLjIpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMC42NjY2NjY2NjY3cmVtIDAuNjY2NjY2NjY2N3JlbSAwIHJnYmEoNzUsIDc1LCA3NywgMC4yKSwgMCAwLjJyZW0gMC4ycmVtIDAgcmdiYSg3NSwgNzUsIDc3LCAwLjIpO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZm9ybS0tdGV4dC1vcmRlciAudGV4dGFyZWEge1xuICAgIG1pbi1oZWlnaHQ6IDUuNzMzMzMzMzMzM3JlbTtcbiAgICBwYWRkaW5nOiAxcmVtIDEuMzMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLmZvcm1fX3JlcXVpcmVkLW5vdGUge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgY29sb3I6ICNkMGQwZDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IDAuNXJlbSAwO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5qdW1ib3Ryb24ge1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmp1bWJvdHJvbl9fY29udGFpbmVyIHtcbiAgaGVpZ2h0OiAyNHJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZlY2MwMDtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6IDAgMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLmp1bWJvdHJvbl9fY29udGFpbmVyIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDIuNjY2NjY2NjY2N3JlbTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjY2NjY2NjY2NjdyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmp1bWJvdHJvbl9fY29udGFpbmVyIHtcbiAgICBoZWlnaHQ6IDMwLjMzMzMzMzMzMzNyZW07XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBwYWRkaW5nLWxlZnQ6IDUuODY2NjY2NjY2N3JlbTtcbiAgICBwYWRkaW5nLXJpZ2h0OiA1Ljg2NjY2NjY2NjdyZW07XG4gIH1cbn1cbi5qdW1ib3Ryb25fX3RpdGxlLCAuanVtYm90cm9uX190ZXh0IHtcbiAgY29sb3I6ICNmZmY7XG59XG4uanVtYm90cm9uX190aXRsZSB7XG4gIGZvbnQtc2l6ZTogMi4yNjY2NjY2NjY3cmVtO1xuICBsaW5lLWhlaWdodDogMi41MzMzMzMzMzMzcmVtO1xuICBmb250LXdlaWdodDogNTAwO1xuICBtYXJnaW4tYm90dG9tOiAxLjhyZW07XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMnJlbTtcbiAgdGV4dC1zaGFkb3c6IDAgMTBweCAzMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmp1bWJvdHJvbl9fdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMi44cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAzLjA2NjY2NjY2NjdyZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5qdW1ib3Ryb25fX3RpdGxlIHtcbiAgICBmb250LXNpemU6IDMuMzMzMzMzMzMzM3JlbTtcbiAgICBsaW5lLWhlaWdodDogMy4ycmVtO1xuICB9XG59XG4uanVtYm90cm9uX190ZXh0IHtcbiAgcGFkZGluZzogMCAwLjhyZW07XG4gIGZvbnQtc2l6ZTogMS4wNjY2NjY2NjY3cmVtO1xuICBsaW5lLWhlaWdodDogMS4zMzMzMzMzMzMzcmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBsZXR0ZXItc3BhY2luZzogMC4wMjczMzMzMzMzcmVtO1xuICB0ZXh0LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgbWFyZ2luLWJvdHRvbTogMS43MzMzMzMzMzMzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuanVtYm90cm9uX190ZXh0IHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQ2NjY2NjY2NjdyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5qdW1ib3Ryb25fX3RleHQge1xuICAgIGZvbnQtc2l6ZTogMS40NjY2NjY2NjY3cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjg2NjY2NjY2NjdyZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMy4ycmVtO1xuICB9XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5sYXp5LWltYWdlIHtcbiAgbGluZS1oZWlnaHQ6IDE7XG59XG4ubGF6eS1pbWFnZS0tdGh1bWJuYWlsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDEwcmVtO1xuICBtYXJnaW46IDAuNXJlbTtcbn1cbi5sYXp5LWltYWdlLS1zbWFsbGVyIHtcbiAgaGVpZ2h0OiAzcmVtO1xufVxuLmxhenktaW1hZ2UtLXNtYWxsIHtcbiAgaGVpZ2h0OiA1cmVtO1xufVxuLmxhenktaW1hZ2UtLWJpZyB7XG4gIGhlaWdodDogMjByZW07XG59XG4ubGF6eS1pbWFnZS0tYmlnZ2VyIHtcbiAgaGVpZ2h0OiAzMHJlbTtcbn1cbi5sYXp5LWltYWdlLS1leHBhbmQge1xuICB3aWR0aDogMTAwJTtcbn1cbi5sYXp5LWltYWdlLS1taW4tc2l6ZSB7XG4gIG1pbi13aWR0aDogMi41cmVtO1xufVxuLmxhenktaW1hZ2UtLWhhcy1ib3JkZXIge1xuICBib3JkZXI6IDAuMjVyZW0gc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMCAxcHggI2YwZjBmMDtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2YwZjBmMDtcbn1cbi5sYXp5LWltYWdlLS1zcGFjZWxlc3Mge1xuICBtYXJnaW46IDA7XG59XG4ubGF6eS1pbWFnZS0td2l0aC1vdmVybGF5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmxhenktaW1hZ2UtLXdpdGgtb3ZlcmxheTo6YmVmb3JlIHtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIHotaW5kZXg6IDE7XG59XG4ubGF6eS1pbWFnZS0tYmFja2dyb3VuZCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5sYXp5LWltYWdlX19pbWFnZS0tdGh1bWJuYWlsIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIG1hcmdpbjogYXV0bztcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xufVxuLmxhenktaW1hZ2VfX2ltYWdlLS1jb2xvci1saWdodCB7XG4gIGNvbG9yOiAjZGFkYWRhO1xufVxuLmxhenktaW1hZ2VfX2JhY2tncm91bmQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xufVxuLmxhenktaW1hZ2UtLXNtYWxsZXIge1xuICBoZWlnaHQ6IDMuNDY2NjY2NjY2N3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmxhenktaW1hZ2UtLXNtYWxsZXIge1xuICAgIGhlaWdodDogMi44cmVtO1xuICB9XG59XG4ubGF6eS1pbWFnZS0tY29uZmlndXJlZC1idW5kbGUge1xuICBtYXJnaW46IDAuNTMzMzMzMzMzM3JlbSAxLjA2NjY2NjY2NjdyZW0gMC41MzMzMzMzMzMzcmVtIDA7XG4gIHBhZGRpbmc6IDAuNTMzMzMzMzMzM3JlbTtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xuICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbn1cbi5sYXp5LWltYWdlLS1jb25maWd1cmVkLWJ1bmRsZTo6YmVmb3JlIHtcbiAgYm9yZGVyLXJhZGl1czogMTBweCAwIDAgMTBweDtcbn1cbi5sYXp5LWltYWdlLS1jYXRlZ29yeS1saXN0IHtcbiAgaGVpZ2h0OiAyMC44NjY2NjY2NjY3cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAubGF6eS1pbWFnZS0tY2F0ZWdvcnktbGlzdCB7XG4gICAgaGVpZ2h0OiAxMC42NjY2NjY2NjY3cmVtO1xuICB9XG59XG4ubGF6eS1pbWFnZS0tY2F0YWxvZyB7XG4gIGhlaWdodDogMTJyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5sYXp5LWltYWdlLS1jYXRhbG9nIHtcbiAgICBoZWlnaHQ6IDE2cmVtO1xuICB9XG59XG4ubGF6eS1pbWFnZS0tY2F0ZWdvcnkge1xuICBoZWlnaHQ6IDguMjY2NjY2NjY2N3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmxhenktaW1hZ2UtLWNhdGVnb3J5IHtcbiAgICBoZWlnaHQ6IDE2cmVtO1xuICB9XG59XG4ubGF6eS1pbWFnZS0tc2hvcHBpbmctbGlzdCB7XG4gIGhlaWdodDogNXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmxhenktaW1hZ2UtLXNob3BwaW5nLWxpc3Qge1xuICAgIGhlaWdodDogMTAuNjY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLmxhenktaW1hZ2UtLWNhcnQge1xuICBoZWlnaHQ6IDVyZW07XG4gIG1hcmdpbjogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmxhenktaW1hZ2UtLWNhcnQge1xuICAgIGhlaWdodDogMTAuNjY2NjY2NjY2N3JlbTtcbiAgICBtYXJnaW46IDAuNTMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLmxhenktaW1hZ2UtLXN1bW1hcnkge1xuICBoZWlnaHQ6IDVyZW07XG4gIG1hcmdpbjogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmxhenktaW1hZ2UtLXN1bW1hcnkge1xuICAgIGhlaWdodDogNi42NjY2NjY2NjY3cmVtO1xuICAgIG1hcmdpbjogMC4yNjY2NjY2NjY3cmVtO1xuICB9XG59XG4ubGF6eS1pbWFnZS0tZnVsbC1zaXplIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ubGF6eS1pbWFnZS0tY2F0ZWdvcnktbGlzdC1pdGVtIHtcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXJnaW46IDAuNTMzMzMzMzMzM3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmxhenktaW1hZ2UtLWNhdGVnb3J5LWxpc3QtaXRlbSB7XG4gICAgaGVpZ2h0OiA2LjY2NjY2NjY2NjdyZW07XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB9XG59XG4ubGF6eS1pbWFnZV9fY29udGVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLm1lbnVfX2l0ZW0ge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5tZW51X19pdGVtID4gLm1lbnUge1xuICBtYXJnaW4tbGVmdDogMC41cmVtO1xufVxuLm1lbnUtLWlubGluZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5tZW51LS1pbmxpbmUgPiAubWVudV9faXRlbSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luOiAwIDAuNXJlbTtcbn1cbi5tZW51LS1pbmxpbmUgPiAubWVudV9faXRlbTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLm1lbnUtLWlubGluZSA+IC5tZW51X19pdGVtOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG59XG4ubWVudS0tYnVsbGV0IC5tZW51X19pdGVtOjpiZWZvcmUge1xuICBjb250ZW50OiBcIuKAolwiO1xuICBtYXJnaW4tcmlnaHQ6IDAuMjVyZW07XG59XG4ubWVudS0tcGx1cyAubWVudV9faXRlbTo6YmVmb3JlIHtcbiAgY29udGVudDogXCIrXCI7XG4gIG1hcmdpbi1yaWdodDogMC4yNXJlbTtcbn1cbi5tZW51LS1hbGVydCB7XG4gIGNvbG9yOiAjZTMyMjEzO1xufVxuLm1lbnVfX2xpbmssIC5tZW51X190ZXh0IHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDEzMzMzMzMzM3JlbTtcbiAgei1pbmRleDogMTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5tZW51X19saW5rLCAubWVudV9fdGV4dCB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxufVxuLm1lbnVfX3RleHQge1xuICBjdXJzb3I6IGNvbnRleHQtbWVudTtcbn1cbi5tZW51IC5zYWxlLWNvbG9yIC5tZW51X19saW5rLFxuLm1lbnUgLnNhbGUtY29sb3IgLm1lbnVfX3RleHQge1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5tZW51IC5zYWxlLWNvbG9yIC5tZW51X19saW5rOmhvdmVyLFxuLm1lbnUgLnNhbGUtY29sb3IgLm1lbnVfX3RleHQ6aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbn1cbi5tZW51IC5uZXctY29sb3IgLm1lbnVfX2xpbmssXG4ubWVudSAubmV3LWNvbG9yIC5tZW51X190ZXh0IHtcbiAgY29sb3I6ICNmZWNjMDA7XG59XG4ubWVudSAubmV3LWNvbG9yIC5tZW51X19saW5rOmhvdmVyLFxuLm1lbnUgLm5ldy1jb2xvciAubWVudV9fdGV4dDpob3ZlciB7XG4gIGNvbG9yOiAjZmVjYzAwO1xufVxuLm1lbnVfX2l0ZW0tLWZpbHRlci1lbnVtZXJhdGlvbiB7XG4gIGxpbmUtaGVpZ2h0OiAxLjJyZW07XG4gIG1hcmdpbi1ib3R0b206IDAuNjY2NjY2NjY2N3JlbTtcbn1cbi5tZW51X19pdGVtLS1maWx0ZXItZW51bWVyYXRpb24gLmNoZWNrYm94LFxuLm1lbnVfX2l0ZW0tLWZpbHRlci1lbnVtZXJhdGlvbiAucmFkaW8ge1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4ubWVudV9faXRlbS0tZmlsdGVyLWVudW1lcmF0aW9uIC5jaGVja2JveF9fbGFiZWwsXG4ubWVudV9faXRlbS0tZmlsdGVyLWVudW1lcmF0aW9uIC5yYWRpb19fbGFiZWwge1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5tZW51X19pdGVtLS1maWx0ZXItZW51bWVyYXRpb24gLmNoZWNrYm94X19jb3VudGVyLFxuLm1lbnVfX2l0ZW0tLWZpbHRlci1lbnVtZXJhdGlvbiAucmFkaW9fX2NvdW50ZXIge1xuICBjb2xvcjogIzkyOTI5Mjtcbn1cbi5tZW51X19pdGVtLS1mb290ZXIge1xuICBtYXJnaW46IDEuMDY2NjY2NjY2N3JlbSAwLjUzMzMzMzMzMzNyZW0gMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm1lbnVfX2l0ZW0tLWZvb3RlciB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxufVxuLm1lbnVfX2l0ZW0tLXNvY2lhbCB7XG4gIG1hcmdpbjogMCAwLjUzMzMzMzMzMzNyZW07XG59XG4ubWVudV9faXRlbS0tc29jaWFsOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG4ubWVudV9faXRlbS0tc29jaWFsOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG59XG4ubWVudS0tZm9vdGVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICBtYXJnaW46IDAgLTAuNTMzMzMzMzMzM3JlbSAxLjczMzMzMzMzMzNyZW07XG4gIHBhZGRpbmc6IDAgMS4zMzMzMzMzMzMzcmVtO1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5tZW51LS1mb290ZXIge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbi5tZW51LS1zb2NpYWwge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogMS43MzMzMzMzMzMzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAubWVudS0tc29jaWFsIHtcbiAgICAtd2Via2l0LWJveC1wYWNrOiBsZWZ0O1xuICAgICAgICAtbXMtZmxleC1wYWNrOiBsZWZ0O1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBsZWZ0O1xuICB9XG59XG4ubWVudV9fdHJpZ2dlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmctcmlnaHQ6IDEuOHJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5tZW51X190cmlnZ2VyIHtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gIH1cbn1cbi5tZW51X190cmlnZ2VyLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMS44cmVtO1xuICByaWdodDogMDtcbiAgdG9wOiAwO1xuICBsaW5lLWhlaWdodDogMDtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgei1pbmRleDogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5tZW51X190cmlnZ2VyLWJ1dHRvbiB7XG4gICAgd2lkdGg6IDEuMzMzMzMzMzMzM3JlbTtcbiAgICByaWdodDogLTEuMzMzMzMzMzMzM3JlbTtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gIH1cbn1cbi5tZW51X190cmlnZ2VyLWJ1dHRvbi1pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogNTAlO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHJvdGF0ZSgtOTBkZWcpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHJvdGF0ZSgtOTBkZWcpO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLm1lbnVfX3RyaWdnZXItYnV0dG9uLWljb24ge1xuICAgIGNvbG9yOiAjYjJiMmIyO1xuICAgIG1hcmdpbi10b3A6IDAuMTMzMzMzMzMzM3JlbTtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIH1cbn1cbi5tZW51X190cmlnZ2VyLWJ1dHRvbi5pcy1hY3RpdmUgLm1lbnVfX3RyaWdnZXItYnV0dG9uLWljb24ge1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHJvdGF0ZSgtMTgwZGVnKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoLTE4MGRlZyk7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAubWVudS0tbHZsLTAge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG4gIC5tZW51LS1sdmwtMCAubWVudV9fZGl2aWRlciB7XG4gICAgYm9yZGVyLWxlZnQtd2lkdGg6IDFweDtcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbiAgICBoZWlnaHQ6IDEuNTMzMzMzMzMzM3JlbTtcbiAgICB3aWR0aDogMC4wNjY2NjY2NjY3cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAubWVudSAuc2hvd2VkIC5tZW51X19saW5rLS1sdmwtMCxcbiAgLm1lbnUgLnNob3dlZCAubWVudV9fdGV4dC0tbHZsLTAge1xuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gICAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzRiNGI0ZDtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxMHB4O1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxMHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuICAubWVudSAuc2hvd2VkIC5tZW51X19saW5rLS1sdmwtMCBzdmcsXG4gIC5tZW51IC5zaG93ZWQgLm1lbnVfX3RleHQtLWx2bC0wIHN2ZyB7XG4gICAgZmlsbDogI2ZmZjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLm1lbnUgLnNob3dlZCAubWVudV9fbGluay0tc2x2dGVjIHtcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IGNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICAgIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMwMWEzZWM7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMTBweDtcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMTBweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cbiAgLm1lbnUgLnNob3dlZCAubWVudV9fbGluay0tc2x2dGVjIHN2ZyB7XG4gICAgZmlsbDogI2ZmZjtcbiAgfVxufVxuLm1lbnVfX2l0ZW0tLWx2bC0wIHtcbiAgcGFkZGluZy1sZWZ0OiAwLjczMzMzMzMzMzNyZW07XG4gIGJvcmRlci1ib3R0b206IHNvbGlkIDAuMDY2NjY2NjY2N3JlbSAjZWNlY2VjO1xuICB6LWluZGV4OiAyO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLm1lbnVfX2l0ZW0tLWx2bC0wIHtcbiAgICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgICAtbXMtZmxleDogYXV0bztcbiAgICAgICAgICAgIGZsZXg6IGF1dG87XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLm1lbnVfX2l0ZW0tLWx2bC0wLnNob3dlZCAubWVudS13cmFwcGVyLS1sdmwtMSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVZKDEpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVkoMSk7XG4gICAgcG9pbnRlci1ldmVudHM6IGluaXRpYWw7XG4gICAgei1pbmRleDogNDAwO1xuICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kZWxheTogMC4xcztcbiAgICAgICAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDAuMXM7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5tZW51X19pdGVtLS1sdmwtMDpub3QoLnNob3dlZCkgLm1lbnUtd3JhcHBlci0tbHZsLTEge1xuICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kZWxheTogMC41cztcbiAgICAgICAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDAuNXM7XG4gIH1cbn1cbi5tZW51X19pdGVtLS1sdmwtMDpsYXN0LW9mLXR5cGUge1xuICBib3JkZXI6IG5vbmU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAubWVudV9faXRlbS0tbHZsLTAubWVudV9faXRlbS0taGFzLWNoaWxkcmVuLWRyb3Bkb3duOjphZnRlciB7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogNTAlO1xuICAgIGJvdHRvbTogLTEuNjY2NjY2NjY2N3JlbTtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKSB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpIHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgd2lkdGg6IDAuNjY2NjY2NjY2N3JlbTtcbiAgICBoZWlnaHQ6IDAuNjY2NjY2NjY2N3JlbTtcbiAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgIGJhY2tncm91bmQ6ICNmZmY7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBoZWxwZXItZWZmZWN0LXRyYW5zaXRpb24ob3BhY2l0eSwgMTAwbXMpO1xuICAgIHRyYW5zaXRpb246IGhlbHBlci1lZmZlY3QtdHJhbnNpdGlvbihvcGFjaXR5LCAxMDBtcyk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxufVxuLm1lbnVfX2xpbmstLWx2bC0wLCAubWVudV9fdGV4dC0tbHZsLTAge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiAxcmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgbGluZS1oZWlnaHQ6IDNyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAubWVudV9fbGluay0tbHZsLTAsIC5tZW51X190ZXh0LS1sdmwtMCB7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cbiAgLm1lbnVfX2xpbmstLWx2bC0wOmhvdmVyLCAubWVudV9fdGV4dC0tbHZsLTA6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM0YjRiNGQ7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMTBweDtcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMTBweDtcbiAgfVxuICAubWVudV9fbGluay0tbHZsLTA6aG92ZXIgc3ZnLCAubWVudV9fdGV4dC0tbHZsLTA6aG92ZXIgc3ZnIHtcbiAgICBmaWxsOiAjZmZmO1xuICB9XG59XG4ubWVudV9fbGluay0tc2x2dGVjIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICBsaW5lLWhlaWdodDogM3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5tZW51X19saW5rLS1zbHZ0ZWMge1xuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gICAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG4gIC5tZW51X19saW5rLS1zbHZ0ZWM6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMwMWEzZWM7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMTBweDtcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMTBweDtcbiAgfVxuICAubWVudV9fbGluay0tc2x2dGVjOmhvdmVyIHN2ZyB7XG4gICAgZmlsbDogI2ZmZjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmlzLXRvdWNoIC5tZW51X190cmlnZ2VyLWJ1dHRvbi0tbHZsLTAge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAubWVudS13cmFwcGVyLS1sdmwtMSB7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAyNTBtcyBlYXNlLWluLW91dDtcbiAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAyNTBtcyBlYXNlLWluLW91dDtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgZWFzZS1pbi1vdXQ7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIGVhc2UtaW4tb3V0LCAtd2Via2l0LXRyYW5zZm9ybSAyNTBtcyBlYXNlLWluLW91dDtcbiAgICBsZWZ0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDEwMCU7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiB0b3A7XG4gICAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3A7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWSgwKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVZKDApO1xuICB9XG59XG4ubWVudS0tbHZsLTEge1xuICBwYWRkaW5nLWJvdHRvbTogMC44cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLm1lbnUtLWx2bC0xIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBhZGRpbmc6IDEuMjY2NjY2NjY2N3JlbSAxLjMzMzMzMzMzMzNyZW0gMS40cmVtO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMS4ycmVtIDEuMnJlbSAwIHJnYmEoNzUsIDc1LCA3NywgMC4yKSwgMCAwLjJyZW0gMC4ycmVtIDAgcmdiYSg3NSwgNzUsIDc3LCAwLjIpO1xuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxLjJyZW0gMS4ycmVtIDAgcmdiYSg3NSwgNzUsIDc3LCAwLjIpLCAwIDAuMnJlbSAwLjJyZW0gMCByZ2JhKDc1LCA3NSwgNzcsIDAuMik7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTQwMHB4KSB7XG4gIC5tZW51LS1sdmwtMSB7XG4gICAgcGFkZGluZzogMi41MzMzMzMzMzMzcmVtIDIuNnJlbSAyLjg2NjY2NjY2NjdyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5tZW51X19pdGVtLS1sdmwtMTpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDEuMDY2NjY2NjY2N3JlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLm1lbnVfX2l0ZW0tLWx2bC0xOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgIG1hcmdpbi1yaWdodDogNC42NjY2NjY2NjY3cmVtO1xuICB9XG59XG4ubWVudV9fbGluay0tbHZsLTEsIC5tZW51X190ZXh0LS1sdmwtMSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDEuMDY2NjY2NjY2N3JlbTtcbiAgbGluZS1oZWlnaHQ6IDIuOHJlbTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDEzMzMzMzMzM3JlbTtcbiAgY29sb3I6ICM2ZjZmNmY7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAubWVudV9fbGluay0tbHZsLTEsIC5tZW51X190ZXh0LS1sdmwtMSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGZvbnQtc2l6ZTogMS4xMzMzMzMzMzMzcmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICBsZXR0ZXItc3BhY2luZzogMDtcbiAgICBjb2xvcjogIzkyOTI5MjtcbiAgfVxufVxuLm1lbnVfX2xpbmstLWx2bC0xOmhvdmVyIHtcbiAgY29sb3I6ICNiMmIyYjI7XG59XG4ubWVudV9fdHJpZ2dlci1idXR0b24tLWx2bC0xIHtcbiAgY29sb3I6ICNkMGQwZDA7XG59XG4ubWVudV9fdHJpZ2dlci1idXR0b24tLWx2bC0xLmlzLWFjdGl2ZTo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICB0b3A6IDA7XG4gIHdpZHRoOiA2Ni42cmVtO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQ6ICMxYTE3MWI7XG4gIHotaW5kZXg6IC0xO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLm1lbnVfX3RyaWdnZXItYnV0dG9uLS1sdmwtMS5pcy1hY3RpdmU6OmFmdGVyIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4ubWVudS0tbHZsLTIge1xuICBwYWRkaW5nLWJvdHRvbTogMC42NjY2NjY2NjY3cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLm1lbnUtLWx2bC0yIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICBtYXJnaW4tdG9wOiAxLjI2NjY2NjY2NjdyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5tZW51X19pdGVtLS1sdmwtMiB7XG4gICAgcGFkZGluZzogMC4ycmVtIDA7XG4gIH1cbn1cbi5tZW51X19saW5rLS1sdmwtMiwgLm1lbnVfX3RleHQtLWx2bC0yIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDAgMS4zMzMzMzMzMzMzcmVtO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAyLjhyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAxMzMzMzMzMzNyZW07XG4gIGNvbG9yOiAjYjJiMmIyO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLm1lbnVfX2xpbmstLWx2bC0yLCAubWVudV9fdGV4dC0tbHZsLTIge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgIGxldHRlci1zcGFjaW5nOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbi5tZW51X19saW5rLS1sdmwtMjpob3ZlciB7XG4gIGNvbG9yOiAjOTI5MjkyO1xufVxuLm1lbnUtLWZsZXgtc3BhY2UtYmV0d2VlbiB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ubW9uZXktcHJpY2Uge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5tb25leS1wcmljZV9fYW1vdW50IHtcbiAgZm9udC1zaXplOiAyLjRyZW07XG59XG4ubW9uZXktcHJpY2VfX2Ftb3VudC0tb3JpZ2luYWwge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiAjMWExNzFiO1xuICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcbn1cbi5tb25leS1wcmljZV9fdGFnIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjI1cmVtO1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5tb25leS1wcmljZS0tYmlnIHtcbiAgbWFyZ2luLXRvcDogMC44cmVtO1xuICBtYXJnaW4tYm90dG9tOiAxLjUzMzMzMzMzMzNyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5tb25leS1wcmljZS0tYmlnIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG59XG4ubW9uZXktcHJpY2UtLW1lZGl1bSB7XG4gIG1hcmdpbjogMCAwIDE1cHg7XG4gIHdpZHRoOiAxMDAlO1xufVxuLm1vbmV5LXByaWNlLS1tYXJnaW4tYm90dG9tLWZyb20tdGFibGV0IHtcbiAgbWFyZ2luOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAubW9uZXktcHJpY2UtLW1hcmdpbi1ib3R0b20tZnJvbS10YWJsZXQge1xuICAgIG1hcmdpbjogMCAwIDE1cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm1vbmV5LXByaWNlLS10ZXh0LXJpZ2h0LWZyb20tdGFibGV0IHtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgfVxufVxuLm1vbmV5LXByaWNlLS1zZWNvbmRhcnkge1xuICBtYXJnaW4tdG9wOiAwLjUzMzMzMzMzMzNyZW07XG4gIHBhZGRpbmc6IDAuOTMzMzMzMzMzM3JlbSAxLjA2NjY2NjY2NjdyZW07XG4gIGJhY2tncm91bmQ6ICMxYTE3MWI7XG59XG4ubW9uZXktcHJpY2VfX2Ftb3VudCB7XG4gIGZvbnQtc2l6ZTogMS4wNjY2NjY2NjY3cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xuICBsaW5lLWhlaWdodDogMS4yO1xuICBjb2xvcjogIzkyOTI5Mjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm1vbmV5LXByaWNlX19hbW91bnQge1xuICAgIGZvbnQtc2l6ZTogMi40cmVtO1xuICB9XG59XG4ubW9uZXktcHJpY2VfX2Ftb3VudC0tYmlnIHtcbiAgZm9udC1zaXplOiAxLjZyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5tb25leS1wcmljZV9fYW1vdW50LS1iaWcge1xuICAgIGZvbnQtc2l6ZTogMS43MzMzMzMzMzMzcmVtO1xuICB9XG59XG4ubW9uZXktcHJpY2VfX2Ftb3VudC0tbWVkaXVtIHtcbiAgZm9udC1zaXplOiAxLjJyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG59XG4ubW9uZXktcHJpY2VfX2Ftb3VudC0tZ3JheS1jb2xvciB7XG4gIGNvbG9yOiAjNmY2ZjZmO1xufVxuLm1vbmV5LXByaWNlX19hbW91bnQtLW9yaWdpbmFsIHtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGNvbG9yOiAjZDBkMGQwO1xuICBmb250LXdlaWdodDogNDAwO1xuICBtYXJnaW4tbGVmdDogMC4yNjY2NjY2NjY3cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAubW9uZXktcHJpY2VfX2Ftb3VudC0tb3JpZ2luYWwge1xuICAgIGZvbnQtc2l6ZTogMi40cmVtO1xuICB9XG59XG4ubW9uZXktcHJpY2VfX2Ftb3VudC0tYmxvY2sge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5tb25leS1wcmljZV9fbW9kZSB7XG4gIGNvbG9yOiAjZDBkMGQwO1xuICBmb250LXNpemU6IDAuOHJlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDAuOTMzMzMzMzMzM3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm1vbmV5LXByaWNlX19tb2RlIHtcbiAgICBtYXJnaW4tbGVmdDogMC4zMzMzMzMzMzMzcmVtO1xuICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICB9XG59XG4ubW9uZXktcHJpY2VfX21vZGUtLWJpZyB7XG4gIGZvbnQtc2l6ZTogMC44NjY2NjY2NjY3cmVtO1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xufVxuLm1vbmV5LXByaWNlX19tb2RlLS1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ubmF2aWdhdGlvbi1pY29uLWxpc3RfX2ljb24ge1xuICBjb2xvcjogIzFhMTcxYjtcbn1cbi5uYXZpZ2F0aW9uLWljb24tbGlzdC0tc29jaWFsIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2aWdhdGlvbi1pY29uLWxpc3QtLXNvY2lhbCB7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG5uYXZpZ2F0aW9uLW11bHRpbGV2ZWwgLmpzLW5hdmlnYXRpb24tbXVsdGlsZXZlbF9fY2xvc2Uge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlcjogbm9uZTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkMGQwZDA7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG5uYXZpZ2F0aW9uLW11bHRpbGV2ZWwgLmpzLW5hdmlnYXRpb24tbXVsdGlsZXZlbF9fY2xvc2Ugc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbm5hdmlnYXRpb24tbXVsdGlsZXZlbCAuanMtbmF2aWdhdGlvbi1tdWx0aWxldmVsX19jbG9zZTpmb2N1cywgbmF2aWdhdGlvbi1tdWx0aWxldmVsIC5qcy1uYXZpZ2F0aW9uLW11bHRpbGV2ZWxfX2Nsb3NlOmhvdmVyLCBuYXZpZ2F0aW9uLW11bHRpbGV2ZWwgLmpzLW5hdmlnYXRpb24tbXVsdGlsZXZlbF9fY2xvc2U6YWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkMGQwZDA7XG4gIGNvbG9yOiAjNGI0YjRkO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ubmF2aWdhdGlvbi1tdWx0aXZpZXctbGlzdF9faWNvbiB7XG4gIGNvbG9yOiAjMWExNzFiO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucGFnaW5hdGlvbiB7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1hcmdpbi10b3A6IDAuNDY2NjY2NjY2N3JlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucGFnaW5hdGlvbiB7XG4gICAgbWFyZ2luLXRvcDogMi42NjY2NjY2NjY3cmVtO1xuICB9XG59XG4ucGFnaW5hdGlvbl9fbGlzdCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuLnBhZ2luYXRpb25fX2l0ZW0tLXBhZ2VzLWJlZm9yZS1lbGxpcHNpcy1pbmRleC0yLCAucGFnaW5hdGlvbl9faXRlbS0tcGFnZXMtYWZ0ZXItZWxsaXBzaXMtaW5kZXgtMiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5wYWdpbmF0aW9uX19pdGVtLS1wYWdlcy1iZWZvcmUtZWxsaXBzaXMtaW5kZXgtMiwgLnBhZ2luYXRpb25fX2l0ZW0tLXBhZ2VzLWFmdGVyLWVsbGlwc2lzLWluZGV4LTIge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxufVxuLnBhZ2luYXRpb25fX3N0ZXAge1xuICAtd2Via2l0LXRyYW5zaXRpb246IGNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtaW4td2lkdGg6IDNyZW07XG4gIG1pbi1oZWlnaHQ6IDNyZW07XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xuICBsaW5lLWhlaWdodDogM3JlbTtcbn1cbi5wYWdpbmF0aW9uX19zdGVwLS1idXR0b24ge1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjYjJiMmIyO1xuICBjb2xvcjogI2IyYjJiMjtcbiAgbWFyZ2luOiAwIDAuNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cbi5wYWdpbmF0aW9uX19zdGVwLS1idXR0b246aG92ZXIsIC5wYWdpbmF0aW9uX19zdGVwLS1idXR0b246Zm9jdXMge1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5wYWdpbmF0aW9uX19zdGVwLS1jdXJyZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICNlY2VjZWM7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLnBhZ2luYXRpb25fX3N0ZXAtLWN1cnJlbnQgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi5wYWdpbmF0aW9uX19zdGVwLS1wcmV2aW91czpob3ZlciwgLnBhZ2luYXRpb25fX3N0ZXAtLXByZXZpb3VzOmZvY3VzLCAucGFnaW5hdGlvbl9fc3RlcC0tbmV4dDpob3ZlciwgLnBhZ2luYXRpb25fX3N0ZXAtLW5leHQ6Zm9jdXMge1xuICBjb2xvcjogIzZmNmY2Zjtcbn1cbi5wYWdpbmF0aW9uX19zdGVwLS1kaXNhYmxlZCwgLnBhZ2luYXRpb25fX3N0ZXAtLWRpc2FibGVkOmhvdmVyLCAucGFnaW5hdGlvbl9fc3RlcC0tZGlzYWJsZWQ6Zm9jdXMge1xuICBjb2xvcjogIzFhMTcxYjtcbn1cbi5wYWdpbmF0aW9uX19zdGVwLS1lbGxpcHNpcyB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAucGFnaW5hdGlvbl9fc3RlcC0tZWxsaXBzaXMge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxufVxuLnBhZ2luYXRpb25fX3N0ZXAtbmF2IHtcbiAgbWluLXdpZHRoOiAycmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAucGFnaW5hdGlvbl9fc3RlcC1uYXYge1xuICAgIHdpZHRoOiBpbmhlcml0O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAucGFnaW5hdGlvbl9fc3RlcC0tZmlyc3QsIC5wYWdpbmF0aW9uX19zdGVwLS1sYXN0IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4ucGFnaW5hdGlvbi0tc2VhcmNoLWNtcy1yZXN1bHRzIHtcbiAgbWFyZ2luLWJvdHRvbTogNHJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wYWdpbmF0aW9uLS1zZWFyY2gtY21zLXJlc3VsdHMge1xuICAgIG1hcmdpbi1ib3R0b206IDcuMzMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLnBhZ2luYXRpb25fX25hdi1pY29uIHtcbiAgZm9udC1zaXplOiAxLjY2NjY2NjY2NjdyZW07XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9faW5kaWNhdG9yLWl0ZW0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAzLjEyNXJlbTtcbiAgaGVpZ2h0OiAwLjI1cmVtO1xuICBib3JkZXItcmFkaXVzOiAwLjEyNXJlbTtcbiAgbWFyZ2luLXJpZ2h0OiAwLjMxMjVyZW07XG4gIGJhY2tncm91bmQ6ICNmMGYwZjA7XG59XG4ucGFzc3dvcmQtY29tcGxleGl0eS1pbmRpY2F0b3JfX2luZGljYXRvci1saXN0LS13ZWFrIHtcbiAgY29sb3I6ICNlMzIyMTM7XG59XG4ucGFzc3dvcmQtY29tcGxleGl0eS1pbmRpY2F0b3JfX2luZGljYXRvci1saXN0LS13ZWFrIC5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9faW5kaWNhdG9yLWl0ZW06bnRoLWNoaWxkKDEpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UzMjIxMztcbn1cbi5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9faW5kaWNhdG9yLWxpc3QtLXdlYWsgLnBhc3N3b3JkLWNvbXBsZXhpdHktaW5kaWNhdG9yX19tZXNzYWdlOjpiZWZvcmUge1xuICBjb250ZW50OiBhdHRyKGRhdGEtd2Vhayk7XG59XG4ucGFzc3dvcmQtY29tcGxleGl0eS1pbmRpY2F0b3JfX2luZGljYXRvci1saXN0LS1tZWRpdW0ge1xuICBjb2xvcjogI2U4OWMzMDtcbn1cbi5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9faW5kaWNhdG9yLWxpc3QtLW1lZGl1bSAucGFzc3dvcmQtY29tcGxleGl0eS1pbmRpY2F0b3JfX2luZGljYXRvci1pdGVtOm50aC1jaGlsZCgxKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlODljMzA7XG59XG4ucGFzc3dvcmQtY29tcGxleGl0eS1pbmRpY2F0b3JfX2luZGljYXRvci1saXN0LS1tZWRpdW0gLnBhc3N3b3JkLWNvbXBsZXhpdHktaW5kaWNhdG9yX19pbmRpY2F0b3ItaXRlbTpudGgtY2hpbGQoMikge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTg5YzMwO1xufVxuLnBhc3N3b3JkLWNvbXBsZXhpdHktaW5kaWNhdG9yX19pbmRpY2F0b3ItbGlzdC0tbWVkaXVtIC5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9fbWVzc2FnZTo6YmVmb3JlIHtcbiAgY29udGVudDogYXR0cihkYXRhLW1lZGl1bSk7XG59XG4ucGFzc3dvcmQtY29tcGxleGl0eS1pbmRpY2F0b3JfX2luZGljYXRvci1saXN0LS1zdHJvbmcge1xuICBjb2xvcjogIzAxOTAzOTtcbn1cbi5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9faW5kaWNhdG9yLWxpc3QtLXN0cm9uZyAucGFzc3dvcmQtY29tcGxleGl0eS1pbmRpY2F0b3JfX2luZGljYXRvci1pdGVtOm50aC1jaGlsZCgxKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMTkwMzk7XG59XG4ucGFzc3dvcmQtY29tcGxleGl0eS1pbmRpY2F0b3JfX2luZGljYXRvci1saXN0LS1zdHJvbmcgLnBhc3N3b3JkLWNvbXBsZXhpdHktaW5kaWNhdG9yX19pbmRpY2F0b3ItaXRlbTpudGgtY2hpbGQoMikge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDE5MDM5O1xufVxuLnBhc3N3b3JkLWNvbXBsZXhpdHktaW5kaWNhdG9yX19pbmRpY2F0b3ItbGlzdC0tc3Ryb25nIC5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9faW5kaWNhdG9yLWl0ZW06bnRoLWNoaWxkKDMpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAxOTAzOTtcbn1cbi5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9faW5kaWNhdG9yLWxpc3QtLXN0cm9uZyAucGFzc3dvcmQtY29tcGxleGl0eS1pbmRpY2F0b3JfX21lc3NhZ2U6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zdHJvbmcpO1xufVxuLnBhc3N3b3JkLWNvbXBsZXhpdHktaW5kaWNhdG9yX19pbmRpY2F0b3ItbGlzdC0tdmVyeS1zdHJvbmcge1xuICBjb2xvcjogIzAxOTAzOTtcbn1cbi5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9faW5kaWNhdG9yLWxpc3QtLXZlcnktc3Ryb25nIC5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9faW5kaWNhdG9yLWl0ZW06bnRoLWNoaWxkKDEpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAxOTAzOTtcbn1cbi5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9faW5kaWNhdG9yLWxpc3QtLXZlcnktc3Ryb25nIC5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9faW5kaWNhdG9yLWl0ZW06bnRoLWNoaWxkKDIpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAxOTAzOTtcbn1cbi5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9faW5kaWNhdG9yLWxpc3QtLXZlcnktc3Ryb25nIC5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9faW5kaWNhdG9yLWl0ZW06bnRoLWNoaWxkKDMpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAxOTAzOTtcbn1cbi5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9faW5kaWNhdG9yLWxpc3QtLXZlcnktc3Ryb25nIC5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9faW5kaWNhdG9yLWl0ZW06bnRoLWNoaWxkKDQpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAxOTAzOTtcbn1cbi5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9faW5kaWNhdG9yLWxpc3QtLXZlcnktc3Ryb25nIC5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9fbWVzc2FnZTo6YmVmb3JlIHtcbiAgY29udGVudDogYXR0cihkYXRhLXZlcnktc3Ryb25nKTtcbn1cbi5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9fbWVzc2FnZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9fYWRkaXRpb25hbC1tZXNzYWdlIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGNvbG9yOiAjNzc3Nzc3O1xufVxuLnBhc3N3b3JkLWNvbXBsZXhpdHktaW5kaWNhdG9yX19hZGRpdGlvbmFsLW1lc3NhZ2UtLXdlYWssIC5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9fYWRkaXRpb25hbC1tZXNzYWdlLS1tZWRpdW0sIC5wYXNzd29yZC1jb21wbGV4aXR5LWluZGljYXRvcl9fYWRkaXRpb25hbC1tZXNzYWdlLS1zdHJvbmcge1xuICBkaXNwbGF5OiBibG9jaztcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnBhc3N3b3JkLWZpZWxkIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLnBhc3N3b3JkLWZpZWxkX19pbnB1dCB7XG4gIHBhZGRpbmctcmlnaHQ6IDEuODc1cmVtO1xufVxuLnBhc3N3b3JkLWZpZWxkX19idXR0b24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB3aWR0aDogMS44NzVyZW07XG4gIGhlaWdodDogMTAwJTtcbiAgY29sb3I6ICM3Nzc3Nzc7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5wYXNzd29yZC1maWVsZF9fYnV0dG9uOmhvdmVyIHtcbiAgY29sb3I6ICMzMzMzMzM7XG59XG4ucGFzc3dvcmQtZmllbGRfX2J1dHRvbi0tc2hvd24gLnBhc3N3b3JkLWZpZWxkX19pY29uLXNob3cge1xuICBkaXNwbGF5OiBub25lO1xufVxuLnBhc3N3b3JkLWZpZWxkX19idXR0b24tLXNob3duIC5wYXNzd29yZC1maWVsZF9faWNvbi1oaWRlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLnBhc3N3b3JkLWZpZWxkX19pY29uLWhpZGUge1xuICBkaXNwbGF5OiBub25lO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucHJpY2Uge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5wcmljZV9fYW1vdW50IHtcbiAgZm9udC1zaXplOiAyLjRyZW07XG59XG4ucHJpY2VfX2Ftb3VudC0tb3JpZ2luYWwge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiAjMWExNzFiO1xuICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcbn1cbi5wcmljZV9fdGFnIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjI1cmVtO1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5wcmljZS0tcGRwIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1hcmdpbjogMXJlbSAwO1xufVxuLnByaWNlLS1jYXJ0LCAucHJpY2UtLWNvbmZpZ3VyYXRvciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cbi5wcmljZS0tY2FydC1zYW1wbGUsIC5wcmljZS0tY29uZmlndXJhdG9yLXNhbXBsZSB7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBmbGV4LWVuZDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogZmxleC1lbmQ7XG59XG4ucHJpY2UtLWF2YWlsYWJsZSB7XG4gIG1hcmdpbjogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByaWNlLS1hdmFpbGFibGUge1xuICAgIG1hcmdpbjogMCAwIDE1cHg7XG4gIH1cbn1cbi5wcmljZS0tc3VtbWFyeSB7XG4gIG1hcmdpbjogMDtcbn1cbi5wcmljZV9fYW1vdW50LWxhYmVsIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5wcmljZV9fYW1vdW50IHtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGZvbnQtc2l6ZTogaW5pdGlhbDtcbn1cbi5wcmljZV9fYW1vdW50LXZhbHVlIHtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cbi5wcmljZV9fYW1vdW50LXZhbHVlLS1zYWxlIHtcbiAgY29sb3I6ICNlMzIyMTM7XG59XG4ucHJpY2VfX2Ftb3VudC0tYWxpZ24tZW5kIHtcbiAgdGV4dC1hbGlnbjogZW5kO1xufVxuLnByaWNlX19hbW91bnQtLWFsdCB7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAucHJpY2VfX2Ftb3VudC0tYWx0LnByaWNlX19hbW91bnQtLWNhdGFsb2ctbGlzdCB7XG4gICAgbWFyZ2luLWxlZnQ6IDAuMjY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLnByaWNlX19hbW91bnQtLXNhbXBsZSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJpY2VfX2Ftb3VudC0tc2FtcGxlIHtcbiAgICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICB9XG59XG4ucHJpY2VfX2Ftb3VudC0tcGRwIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGJhc2VsaW5lO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbn1cbi5wcmljZV9fYW1vdW50LS1wZHAgLnByaWNlX19hbW91bnQtdmFsdWUge1xuICBmb250LXNpemU6IDIuNHJlbTtcbn1cbi5wcmljZV9fYW1vdW50LS1wZHAgLnByaWNlX19hbW91bnQtbGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmctcmlnaHQ6IDAuNXJlbTtcbn1cbi5wcmljZV9fYW1vdW50LS1jYXJ0LCAucHJpY2VfX2Ftb3VudC0tY29uZmlndXJhdG9yLCAucHJpY2VfX2Ftb3VudC0tdHJhY2stY29uZmlndXJhdG9yIHtcbiAgZm9udC1zaXplOiAxLjJyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIGNvbG9yOiAjNmY2ZjZmO1xufVxuLnByaWNlX19hbW91bnQtLWNvbmZpZ3VyYXRvciAucHJpY2VfX2Ftb3VudC1sYWJlbCwgLnByaWNlX19hbW91bnQtLXRyYWNrLWNvbmZpZ3VyYXRvciAucHJpY2VfX2Ftb3VudC1sYWJlbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XG59XG4ucHJpY2VfX2Ftb3VudC0tY2F0YWxvZyB7XG4gIGNvbG9yOiAjZTMyMjEzO1xuICBtYXJnaW4tcmlnaHQ6IDByZW07XG59XG4ucHJpY2VfX2Ftb3VudC0tb3JpZ2luYWwge1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXdlaWdodDogNDAwO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGZvbnQtc2l6ZTogaW5pdGlhbDtcbiAgbWFyZ2luLXJpZ2h0OiAwLjI2NjY2NjY2NjdyZW07XG59XG4ucHJpY2VfX2Ftb3VudC0tb3JpZ2luYWwgLnByaWNlX19hbW91bnQtdmFsdWUge1xuICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnByaWNlX19hbW91bnQtLW9yaWdpbmFsLnByaWNlX19hbW91bnQtLWNhdGFsb2ctbGlzdCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICB9XG59XG4ucHJpY2VfX2Ftb3VudC0tb3JpZ2luYWwucHJpY2VfX2Ftb3VudC0tcGRwIHtcbiAgbWFyZ2luLXJpZ2h0OiAwO1xuICBkaXNwbGF5OiBpbmhlcml0O1xufVxuLnByaWNlX19hbW91bnQtLW1lZGl1bSB7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xufVxuLnByaWNlX19hbW91bnQtLW91dGxldCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAtd2Via2l0LWJveC1hbGlnbjogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG59XG4ucHJpY2VfX2Ftb3VudC0tb3V0bGV0IC5wcmljZV9fYW1vdW50LXZhbHVlIHtcbiAgbWFyZ2luLXRvcDogMC4yNXJlbTtcbn1cbi5wcmljZV9fbW9kZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLnByaWNlX19tb2RlLS1hbGlnbi1lbmQge1xuICB0ZXh0LWFsaWduOiBlbmQ7XG59XG4ucHJpY2VfX21vZGUtLXBkcCB7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG59XG4ucHJpY2VfX21vZGUtLWNhcnQsIC5wcmljZV9fbW9kZS0tY2F0YWxvZy1saXN0LCAucHJpY2VfX21vZGUtLWNvbmZpZ3VyYXRvciwgLnByaWNlX19tb2RlLS10cmFjay1jb25maWd1cmF0b3Ige1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZy10b3A6IDAuNXJlbTtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4ucHJpY2VfX21vZGUtLWJsb2NrIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4ucHJpY2VfX21vZGUtLWhpZGUtbW9kZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ucHJpY2VfX3ByaWNlLWxhYmVsIHtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4ucHJpY2UtLXByb2R1Y3QtbGlzdGluZy1ib3gge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLXdlYmtpdC1ib3gtcGFjazogZW5kO1xuICAgICAgLW1zLWZsZXgtcGFjazogZW5kO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5wcmljZS0tcHJvZHVjdC1saXN0aW5nLWJveCB7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbn1cbi5wcmljZS0tcHJvZHVjdC1saXN0aW5nLWJveCAucHJpY2VfX2Ftb3VudC0tb3JpZ2luYWwgLnByaWNlX19hbW91bnQtdmFsdWUge1xuICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5wcmljZS0tcHJvZHVjdC1saXN0aW5nLWJveCAucHJpY2VfX2Ftb3VudCB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIC13ZWJraXQtYm94LWFsaWduOiBiYXNlbGluZTtcbiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICB9XG59XG4ucHJpY2UtLXByb2R1Y3QtbGlzdGluZy1ib3ggLnByaWNlX19hbW91bnQtbGFiZWwge1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZy1yaWdodDogMC41cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAucHJpY2UtLXByb2R1Y3QtbGlzdGluZy1ib3ggLnByaWNlX19hbW91bnQtbGFiZWwge1xuICAgIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgfVxufVxuLnByaWNlLS1wcm9kdWN0LWxpc3RpbmctYm94IC5wcmljZV9fYW1vdW50LXZhbHVlIHtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgZm9udC1zaXplOiAxcmVtO1xufVxuLnByaWNlLS1wcm9kdWN0LWxpc3RpbmctYm94IC5wcmljZV9fYW1vdW50LXZhbHVlLS1zYWxlIHtcbiAgY29sb3I6ICNlMzIyMTM7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcmljZS0tcHJvZHVjdC1saXN0aW5nLWJveCAucHJpY2VfX2Ftb3VudC12YWx1ZSB7XG4gICAgZm9udC1zaXplOiAxLjJyZW07XG4gIH1cbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnByb2R1Y3QtY2FyZCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5wcm9kdWN0LWNhcmRfX2NvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZy1ib3R0b206IDIuNXJlbTtcbn1cbi5wcm9kdWN0LWNhcmRfX2FjdGlvbnMtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDAuNXJlbTtcbiAgbGVmdDogMC41cmVtO1xuICByaWdodDogMC41cmVtO1xuICBtYXJnaW46IGF1dG87XG59XG4ucHJvZHVjdC1jYXJkLS1zdHJldGNoIHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLnByb2R1Y3QtY2FyZF9fY29udGFpbmVyIHtcbiAgcGFkZGluZy1ib3R0b206IDMuNXJlbTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnByb2R1Y3QtaXRlbSB7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDEuMzMzMzMzMzMzM3JlbTtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1pdGVtIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IDEuMzMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLnByb2R1Y3QtaXRlbSAuZW5lcmd5LWxhYmVsIHtcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIG1hcmdpbi1yaWdodDogMC42NjY2NjY2NjY3cmVtO1xuICBmb250LXNpemU6IDRyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjE7XG59XG4ucHJvZHVjdC1pdGVtX19wcm9kdWN0IHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAzMy4zMzMzMzMzMzMzJSAzMy4zMzMzMzMzMzMzJSAzMy4zMzMzMzMzMzMzJTtcbiAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVjbGFyYXRpb24tYmxvY2stbm8tcmVkdW5kYW50LWxvbmdoYW5kLXByb3BlcnRpZXMgKi9cbiAgZ3JpZC10ZW1wbGF0ZS1hcmVhczogXCJpbWFnZSBkZXNjcmlwdGlvbiBkZXNjcmlwdGlvblwiIFwiZGVsZXRlIHZhbHVlIHZhbHVlXCIgXCJub3RlIG5vdGUgbm90ZVwiO1xuICBwYWRkaW5nOiAxcmVtIDFyZW0gMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtaXRlbV9fcHJvZHVjdCB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxNi42NjY2NjY2NjY3JSAxNi42NjY2NjY2NjY3JSAxNi42NjY2NjY2NjY3JSAxNi42NjY2NjY2NjY3JSAxNi42NjY2NjY2NjY3JSAxNi42NjY2NjY2NjY3JTtcbiAgICBncmlkLXRlbXBsYXRlLWFyZWFzOiBcImltYWdlIGRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uIHZhbHVlIHZhbHVlXCI7XG4gIH1cbn1cbi5wcm9kdWN0LWl0ZW1fX3Byb2R1Y3QgLnByb2R1Y3QtaXRlbV9faW1hZ2Uge1xuICBncmlkLWFyZWE6IGltYWdlO1xuICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XG59XG4ucHJvZHVjdC1pdGVtX19wcm9kdWN0IC5wcm9kdWN0LWl0ZW1fX2Rlc2NyaXB0aW9uIHtcbiAgZ3JpZC1hcmVhOiBkZXNjcmlwdGlvbjtcbn1cbi5wcm9kdWN0LWl0ZW1fX3Byb2R1Y3QgLnByb2R1Y3QtaXRlbV9fZGVsZXRlLWNhcnQge1xuICBncmlkLWFyZWE6IGRlbGV0ZTtcbn1cbi5wcm9kdWN0LWl0ZW1fX3Byb2R1Y3QgLnByb2R1Y3QtaXRlbV9fdG90YWwge1xuICBncmlkLWFyZWE6IHZhbHVlO1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbi5wcm9kdWN0LWl0ZW1fX3Byb2R1Y3QgLnByb2R1Y3QtaXRlbV9fbm90ZSB7XG4gIGdyaWQtYXJlYTogbm90ZTtcbn1cbi5wcm9kdWN0LWl0ZW1fX3RvdGFsIHtcbiAgcGFkZGluZzogMC43NXJlbSAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAzNzVweCkge1xuICAucHJvZHVjdC1pdGVtX190b3RhbCAuZW5lcmd5LWxhYmVsIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAucHJvZHVjdC1pdGVtX190b3RhbCAucHJpY2VfX3F1YW50aXR5LWhvbGRlciB7XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWl0ZW1fX3RvdGFsIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG4ucHJvZHVjdC1pdGVtX190b3RhbCAucHJpY2VfX2NvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHBhZGRpbmc6IDAuMjVyZW0gMDtcbiAgbWFyZ2luLWxlZnQ6IDAuNXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtaXRlbV9fdG90YWwgLnByaWNlX19jb250YWluZXIge1xuICAgIG1hcmdpbi1sZWZ0OiAxLjVyZW07XG4gIH1cbn1cbi5wcm9kdWN0LWl0ZW1fX3RvdGFsIC5hdmFpbGFiaWxpdHkge1xuICAtd2Via2l0LWJveC1wYWNrOiBlbmQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgbWFyZ2luLXRvcDogMC41cmVtO1xufVxuLnByb2R1Y3QtaXRlbS0tc2hvcHBpbmctbGlzdC1hdmFpbGFibGUge1xuICBwYWRkaW5nLWJvdHRvbTogNXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtaXRlbS0tc2hvcHBpbmctbGlzdC1hdmFpbGFibGUge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG4ucHJvZHVjdC1pdGVtX190aXRsZSB7XG4gIC1tcy13b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLWJsb2NrLW5vLWR1cGxpY2F0ZS1wcm9wZXJ0aWVzICovXG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIC1tcy1oeXBoZW5zOiBhdXRvO1xuICAgICAgaHlwaGVuczogYXV0bztcbn1cbi5wcm9kdWN0LWl0ZW1fX3RpdGxlLS1zaG9wcGluZy1saXN0LWFsdGVybmF0aXZlIHtcbiAgZm9udC1zaXplOiAwLjhyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWl0ZW1fX3RpdGxlLS1zaG9wcGluZy1saXN0LWFsdGVybmF0aXZlIHtcbiAgICBmb250LXNpemU6IDEuMDY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLnByb2R1Y3QtaXRlbV9fdGl0bGUtLWhpZGRlbiB7XG4gIG9wYWNpdHk6IDAuNTtcbn1cbi5wcm9kdWN0LWl0ZW1fX2NvbG9yIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMC45MzMzMzMzMzMzcmVtO1xuICBoZWlnaHQ6IDAuOTMzMzMzMzMzM3JlbTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBtYXJnaW4tbGVmdDogMC4yNjY2NjY2NjY3cmVtO1xuICB0ZXh0LWluZGVudDogLTY2Ni42cmVtO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLnByb2R1Y3QtaXRlbV9fY29sb3ItcHJldmlldyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luLXRvcDogMXJlbTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDAuODY2NjY2NjY2N3JlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICM2ZjZmNmY7XG4gIHBhZGRpbmctcmlnaHQ6IDEuNHJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNHJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtaXRlbV9fY29sb3ItcHJldmlldyB7XG4gICAgbWFyZ2luLXRvcDogMC42NjY2NjY2NjY3cmVtO1xuICAgIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICB9XG59XG4ucHJvZHVjdC1pdGVtX19jb2xvci1wcmV2aWV3LWRlY29yYXRpb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwO1xuICB0b3A6IDAuMnJlbTtcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBib3JkZXI6IDAuMDY2NjY2NjY2N3JlbSBzb2xpZCAjZWNlY2VjO1xufVxuLnByb2R1Y3QtaXRlbV9fYXZhaWxhYmxlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgbWFyZ2luLWJvdHRvbTogMC41MzMzMzMzMzMzcmVtO1xufVxuLnByb2R1Y3QtaXRlbS0tZml4ZWQtaW5wdXQge1xuICBtYXgtd2lkdGg6IDkuMnJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMnJlbTtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG4ucHJvZHVjdC1pdGVtLS1zaG9wcGluZy1saXN0LWFsdGVybmF0aXZlIHtcbiAgbWFyZ2luLWJvdHRvbTogMC42NjY2NjY2NjY3cmVtO1xufVxuLnByb2R1Y3QtaXRlbV9fY2hlY2tib3gge1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ucHJvZHVjdC1pdGVtX19jaGVja2JveC1jb2wge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI2LCAyMywgMjcsIDAuMDUpO1xuICBwYWRkaW5nLWxlZnQ6IDAuOHJlbTtcbn1cbi5wcm9kdWN0LWl0ZW1fX2NoZWNrYm94LWNvbC0tc2hvcHBpbmctbGlzdCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDA7XG4gIHRvcDogMDtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWl0ZW1fX2NoZWNrYm94LWNvbC0tc2hvcHBpbmctbGlzdCB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjYsIDIzLCAyNywgMC4wNSk7XG4gICAgcGFkZGluZy1ib3R0b206IDEuMzMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLnByb2R1Y3QtaXRlbV9fcXVhbnRpdHktaG9sZGVyIHtcbiAgcGFkZGluZy1ib3R0b206IDEuMDY2NjY2NjY2N3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtaXRlbV9fcXVhbnRpdHktaG9sZGVyIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgfVxufVxuLnByb2R1Y3QtaXRlbV9fcXVhbnRpdHkge1xuICBtYXJnaW4tdG9wOiAwLjg2NjY2NjY2NjdyZW07XG4gIGZvbnQtc2l6ZTogMC44NjY2NjY2NjY3cmVtO1xuICBjb2xvcjogIzkyOTI5Mjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtaXRlbV9fcXVhbnRpdHkge1xuICAgIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICB9XG59XG4ucHJvZHVjdC1pdGVtX19xdWFudGl0eS10aXRsZSB7XG4gIGNvbG9yOiAjNmY2ZjZmO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLnByb2R1Y3QtaXRlbV9fZGVsZXRlLWNhcnQge1xuICBwYWRkaW5nOiAxLjJyZW0gMDtcbn1cbi5wcm9kdWN0LWl0ZW1fX2RlbGV0ZS1jYXJ0IC5pY29uIHtcbiAgZm9udC1zaXplOiAyLjRyZW07XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLnByb2R1Y3QtaXRlbV9fZGVsZXRlLWNhcnQgLmJ1dHRvbltkaXNhYmxlZF0sXG4ucHJvZHVjdC1pdGVtX19kZWxldGUtY2FydCAuYnV0dG9uLS1kaXNhYmxlZCxcbi5wcm9kdWN0LWl0ZW1fX2RlbGV0ZS1jYXJ0IC5idXR0b25bZGlzYWJsZWRdOmhvdmVyLFxuLnByb2R1Y3QtaXRlbV9fZGVsZXRlLWNhcnQgLmJ1dHRvbi0tZGlzYWJsZWQ6aG92ZXIge1xuICBiYWNrZ3JvdW5kOiBpbmhlcml0O1xuICBjb2xvcjogaW5oZXJpdDtcbiAgYm9yZGVyOiBpbmhlcml0O1xufVxuLnByb2R1Y3QtaXRlbV9fcmVtb3ZlLWJ1dHRvbiB7XG4gIG1hcmdpbi10b3A6IC0zLjJyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWl0ZW1fX3JlbW92ZS1idXR0b24ge1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuLnByb2R1Y3QtaXRlbV9fcmVtb3ZlLWJ1dHRvbi10ZXh0IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtaXRlbV9fcmVtb3ZlLWJ1dHRvbi10ZXh0IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIH1cbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnByb2R1Y3QtaXRlbS1saXN0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbn1cbi5wcm9kdWN0LWl0ZW0tbGlzdF9fbmFtZSB7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLnByb2R1Y3QtaXRlbS1saXN0X19hY3Rpb25zIHtcbiAgbWFyZ2luLXRvcDogMXJlbTtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcbiAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gIC13ZWJraXQtYm94LXBhY2s6IGVuZDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xufVxuLnByb2R1Y3QtaXRlbS1saXN0X19hY3Rpb25zLS1zcGFjaW5nbGVzcyB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4ucHJvZHVjdC1pdGVtLWxpc3RfX2FjdGlvbnMtcm93IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICB3aWR0aDogMTAwJTtcbn1cbi5wcm9kdWN0LWl0ZW0tbGlzdF9fYWN0aW9ucyB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDA7XG4gICAgICAtbXMtZmxleC1wb3NpdGl2ZTogMDtcbiAgICAgICAgICBmbGV4LWdyb3c6IDA7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5wcm9kdWN0LWxpc3QtaXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5wcm9kdWN0LWxpc3QtaXRlbV9fY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLnByb2R1Y3QtbGlzdC1pdGVtX19jb250YWluZXIge1xuICBwYWRkaW5nOiAwIDAuNnJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMnJlbTtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnByb2R1Y3QtbGlzdC1pdGVtX19jb250YWluZXIge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMS4zMzMzMzMzMzMzcmVtO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjYsIDIzLCAyNywgMC4wNSk7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wcm9kdWN0LWxpc3QtaXRlbV9fY29udGFpbmVyIHtcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQsIC13ZWJraXQtYm94LXNoYWRvdyAyNTBtcyBlYXNlLWluLW91dDtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0LCAtd2Via2l0LWJveC1zaGFkb3cgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAyNTBtcyBlYXNlLWluLW91dCwgYmFja2dyb3VuZC1jb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDI1MG1zIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0LCAtd2Via2l0LWJveC1zaGFkb3cgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIH1cbiAgLnByb2R1Y3QtbGlzdC1pdGVtX19jb250YWluZXI6aG92ZXIge1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAzcHggM3B4IDAgcmdiYSg3NSwgNzUsIDc3LCAwLjIpLCAwIDE4cHggMThweCAwIHJnYmEoNzUsIDc1LCA3NywgMC4yKTtcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgM3B4IDNweCAwIHJnYmEoNzUsIDc1LCA3NywgMC4yKSwgMCAxOHB4IDE4cHggMCByZ2JhKDc1LCA3NSwgNzcsIDAuMik7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgfVxufVxuLnByb2R1Y3QtbGlzdC1pdGVtX19pbWFnZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnByb2R1Y3QtbGlzdC1pdGVtX19pbWFnZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnByb2R1Y3QtbGlzdC1pdGVtX19pbWFnZSB7XG4gICAgcGFkZGluZzogMC41cmVtIDEuMDY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLnByb2R1Y3QtbGlzdC1pdGVtX19jb250ZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAucHJvZHVjdC1saXN0LWl0ZW1fX2NvbnRlbnQge1xuICAgIHBhZGRpbmc6IDIuNDY2NjY2NjY2N3JlbSAwLjY2NjY2NjY2NjdyZW0gNC42NjY2NjY2NjY3cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWxpc3QtaXRlbV9fY29udGVudCB7XG4gICAgcGFkZGluZy1sZWZ0OiAxLjMzMzMzMzMzMzNyZW07XG4gICAgcGFkZGluZy1yaWdodDogMnJlbTtcbiAgfVxufVxuLnByb2R1Y3QtbGlzdC1pdGVtX190b3RhbCB7XG4gIHBhZGRpbmctdG9wOiAwLjY2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5wcm9kdWN0LWxpc3QtaXRlbV9fdG90YWwge1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIHBhZGRpbmc6IDIuMzMzMzMzMzMzM3JlbSAycmVtIDIuMzMzMzMzMzMzM3JlbSAxLjJyZW07XG4gIH1cbn1cbi5wcm9kdWN0LWxpc3QtaXRlbV9fb3ZlcmxheSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDAuNXJlbSAxLjA2NjY2NjY2NjdyZW07XG4gIG1hcmdpbjogMCAtMC42cmVtIDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5wcm9kdWN0LWxpc3QtaXRlbV9fb3ZlcmxheSB7XG4gICAgcG9zaXRpb246IHN0YXRpYztcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuLnByb2R1Y3QtbGlzdC1pdGVtX19vdmVybGF5OjpiZWZvcmUge1xuICBjb250ZW50OiBcIlwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNiwgMjMsIDI3LCAwLjA1KTtcbiAgei1pbmRleDogMTtcbn1cbi5wcm9kdWN0LWxpc3QtaXRlbV9faW5uZXItLXRvdGFsIHtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IHN0YXJ0O1xuICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAucHJvZHVjdC1saXN0LWl0ZW1fX2lubmVyLS10b3RhbCB7XG4gICAgLXdlYmtpdC1ib3gtYWxpZ246IGVuZDtcbiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGVuZDtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbn1cbi5wcm9kdWN0LWxpc3QtaXRlbV9fbmFtZSB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIGNvbG9yOiAjNmY2ZjZmO1xuICBsZXR0ZXItc3BhY2luZzogMC4wMDY2NjY2NjY3cmVtO1xufVxuLnByb2R1Y3QtbGlzdC1pdGVtX19kZXRhaWxzIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnByb2R1Y3QtbGlzdC1pdGVtX19kZXRhaWxzIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucXVvdGUtc3RhdHVzIHtcbiAgYm9yZGVyLXJhZGl1czogMS4wNjY2NjY2NjY3cmVtO1xuICBwYWRkaW5nOiAwLjI2NjY2NjY2NjdyZW0gMC41cmVtO1xuICBmb250LXNpemU6IDAuOHJlbTtcbiAgbWluLXdpZHRoOiA2cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4ucXVvdGUtc3RhdHVzLS13YWl0aW5nIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMzcuMSwgMTc3Ljk1MjE3MzkxMywgOTMuOSwgMC41KTtcbiAgY29sb3I6IHJnYigyMDYuMSwgMTMwLjQzMDQzNDc4MjYsIDIyLjkpO1xufVxuLnF1b3RlLXN0YXR1cy0tYXBwcm92ZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEuMzUxNzI0MTM3OSwgMTk0LjY0ODI3NTg2MjEsIDc3LjA0ODI3NTg2MjEsIDAuMyk7XG4gIGNvbG9yOiByZ2IoMC42NDgyNzU4NjIxLCA5My4zNTE3MjQxMzc5LCAzNi45NTE3MjQxMzc5KTtcbn1cbi5xdW90ZS1zdGF0dXMtLWRlY2xpbmVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMzguNTQ4NzgwNDg3OCwgNzEuNDM5MDI0MzkwMiwgNTguNDUxMjE5NTEyMiwgMC4zKTtcbiAgY29sb3I6IHJnYigxNzkuOTM5MDI0MzkwMiwgMjYuOTUxMjE5NTEyMiwgMTUuMDYwOTc1NjA5OCk7XG59XG4ucXVvdGUtc3RhdHVzLS1zbWFsbCB7XG4gIHBhZGRpbmc6IDAgMC41cmVtO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uc2VhcmNoLWZvcm0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uc2VhcmNoLWZvcm1fX2J1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICB3aWR0aDogMi44NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHBhZGRpbmc6IDA7XG4gIGJvcmRlcjogbm9uZTtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICM5MjkyOTI7XG4gIHotaW5kZXg6IDcwMztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnNlYXJjaC1mb3JtX19idXR0b24ge1xuICAgIHdpZHRoOiAzLjczMzMzMzMzMzNyZW07XG4gIH1cbn1cbi5zZWFyY2gtZm9ybV9fYnV0dG9uLS1zdWJtaXQge1xuICBsZWZ0OiAwO1xufVxuLnNlYXJjaC1mb3JtX19idXR0b24tLWNsb3NlIHtcbiAgcmlnaHQ6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zZWFyY2gtZm9ybV9fYnV0dG9uLS1jbG9zZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLnNlYXJjaC1mb3JtX19idXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xufVxuLnNlYXJjaC1mb3JtX19idXR0b246aG92ZXIgLmljb24ge1xuICBjb2xvcjogI2IyYjJiMjtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnNpbXBsZS1jYXJvdXNlbF9fY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLWxlZnQ6IDEuNXJlbTtcbiAgcGFkZGluZy1yaWdodDogMS41cmVtO1xufVxuLnNpbXBsZS1jYXJvdXNlbF9fdmlldyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB6LWluZGV4OiAxO1xufVxuLnNpbXBsZS1jYXJvdXNlbF9fc2xpZGVyIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSA1MDBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gNTAwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSA1MDBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDUwMG1zIGVhc2UtaW4tb3V0LCAtd2Via2l0LXRyYW5zZm9ybSA1MDBtcyBlYXNlLWluLW91dDtcbiAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgZmxleC13cmFwOiBub3dyYXA7XG59XG4uc2ltcGxlLWNhcm91c2VsX19kb3RzIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBsaW5lLWhlaWdodDogMDtcbn1cbi5zaW1wbGUtY2Fyb3VzZWxfX2RvdCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogMC4yNXJlbTtcbn1cbi5zaW1wbGUtY2Fyb3VzZWxfX2RvdDo6YmVmb3JlIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDE1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDE1MG1zIGVhc2UtaW4tb3V0O1xuICBjb250ZW50OiBcIlwiO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDAuNXJlbTtcbiAgaGVpZ2h0OiAwLjVyZW07XG4gIGJhY2tncm91bmQtY29sb3I6ICNkYWRhZGE7XG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XG59XG4uc2ltcGxlLWNhcm91c2VsX19kb3Q6aG92ZXI6OmJlZm9yZSwgLnNpbXBsZS1jYXJvdXNlbF9fZG90LS1jdXJyZW50OjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVjYzAwO1xufVxuLnNpbXBsZS1jYXJvdXNlbF9fbmF2aWdhdGlvbiB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGJvdHRvbTogMDtcbiAgei1pbmRleDogMjtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG4uc2ltcGxlLWNhcm91c2VsX19uYXZpZ2F0aW9uLS1wcmV2IHtcbiAgbGVmdDogMDtcbn1cbi5zaW1wbGUtY2Fyb3VzZWxfX25hdmlnYXRpb24tLW5leHQge1xuICByaWdodDogMDtcbn1cbi5zaW1wbGUtY2Fyb3VzZWxfX2Fycm93IHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIGNvbG9yOiAjZGFkYWRhO1xuICBwb2ludGVyLWV2ZW50czogYWxsO1xufVxuLnNpbXBsZS1jYXJvdXNlbF9fYXJyb3c6aG92ZXIge1xuICBjb2xvcjogI2ZlY2MwMDtcbn1cbi5zaW1wbGUtY2Fyb3VzZWwtLWluc2V0IC5zaW1wbGUtY2Fyb3VzZWxfX2NvbnRhaW5lciB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgcGFkZGluZy1yaWdodDogMDtcbn1cbi5zaW1wbGUtY2Fyb3VzZWwtLWluc2V0IC5zaW1wbGUtY2Fyb3VzZWxfX25hdmlnYXRpb24ge1xuICB3aWR0aDogYXV0bztcbn1cbi5zaW1wbGUtY2Fyb3VzZWwtLWluc2V0IC5zaW1wbGUtY2Fyb3VzZWxfX2Fycm93IHtcbiAgcGFkZGluZzogMC41cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI0NCwgMjQ0LCAyNDQsIDAuNzUpO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc2ltcGxlLWNhcm91c2VsX19uYXZpZ2F0aW9uIHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgb3BhY2l0eTogMDtcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQsIG9wYWNpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gICAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAyNTBtcyBlYXNlLWluLW91dCwgb3BhY2l0eSAyNTBtcyBlYXNlLWluLW91dDtcbiAgfVxuICAuc2ltcGxlLWNhcm91c2VsOmhvdmVyIC5zaW1wbGUtY2Fyb3VzZWxfX25hdmlnYXRpb24ge1xuICAgIHBvaW50ZXItZXZlbnRzOiBhbGw7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5zaW5nbGUtYnV0dG9uLWZvcm1fX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uc2luZ2xlLWJ1dHRvbi1mb3JtX19idXR0b246aG92ZXIsIC5zaW5nbGUtYnV0dG9uLWZvcm1fX2J1dHRvbjpmb2N1cyB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uc3RhdHVzIHtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogMC4xcmVtIDAuNXJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjM5Ljc0NDA5NDQ4ODIsIDE3Ny41KTtcbiAgY29sb3I6IHJnYigyMDMsIDE2My4wMzkzNzAwNzg3LCAwKTtcbiAgYm9yZGVyLXJhZGl1czogMS4wNjY2NjY2NjY3cmVtO1xuICBwYWRkaW5nOiAwLjI2NjY2NjY2NjdyZW0gMS4wNjY2NjY2NjY3cmVtO1xuICBmb250LXNpemU6IDAuOHJlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLnN0YXR1cy0taG9sbG93IHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RhZGFkYTtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgY29sb3I6ICMxYTE3MWI7XG59XG4uc3RhdHVzLS1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDY5Ljc4NjIwNjg5NjYsIDI1My43MTM3OTMxMDM0LCAxNDEuODEzNzkzMTAzNCk7XG4gIGNvbG9yOiByZ2IoMC42NDgyNzU4NjIxLCA5My4zNTE3MjQxMzc5LCAzNi45NTE3MjQxMzc5KTtcbn1cbi5zdGF0dXMtLXN1Y2Nlc3MtbGlnaHQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgY29sb3I6IHJnYigxNDQuNTU1NTU1NTU1NiwgMTk0LjUxODUxODUxODUsIDEwMi40ODE0ODE0ODE1KTtcbn1cbi5zdGF0dXMtLXdhcm5pbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjQ5Ljg1LCAyMzIuODMyNjA4Njk1NywgMjA4LjY1KTtcbiAgY29sb3I6IHJnYigyMDYuMSwgMTMwLjQzMDQzNDc4MjYsIDIyLjkpO1xufVxuLnN0YXR1cy0tYWxlcnQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjQ4LjM5NjM0MTQ2MzQsIDE4MS4zMTcwNzMxNzA3LCAxNzYuMTAzNjU4NTM2Nik7XG4gIGNvbG9yOiByZ2IoMTc5LjkzOTAyNDM5MDIsIDI2Ljk1MTIxOTUxMjIsIDE1LjA2MDk3NTYwOTgpO1xufVxuLnN0YXR1cy0taW5mbyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDIzOS43NDQwOTQ0ODgyLCAxNzcuNSk7XG4gIGNvbG9yOiByZ2IoMjAzLCAxNjMuMDM5MzcwMDc4NywgMCk7XG59XG4uc3RhdHVzLS1uZXV0cmFsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIzNS4yNSwgMjM1LjI1LCAyMzUuMjUpO1xuICBjb2xvcjogcmdiKDEyMC41LCAxMjAuNSwgMTIwLjUpO1xufVxuLnN0YXR1cy0taW4tcHJvZ3Jlc3MsIC5zdGF0dXMtLXJlZnVuZGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI0OC4zOTYzNDE0NjM0LCAxODEuMzE3MDczMTcwNywgMTc2LjEwMzY1ODUzNjYpO1xuICBjb2xvcjogcmdiKDE3OS45MzkwMjQzOTAyLCAyNi45NTEyMTk1MTIyLCAxNS4wNjA5NzU2MDk4KTtcbn1cbi5zdGF0dXMtLXJlYWR5LCAuc3RhdHVzLS1wYWlkLCAuc3RhdHVzLS1kZWxpdmVyZWQsIC5zdGF0dXMtLWNvbmZpZ3VyZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoNjkuNzg2MjA2ODk2NiwgMjUzLjcxMzc5MzEwMzQsIDE0MS44MTM3OTMxMDM0KTtcbiAgY29sb3I6IHJnYigwLjY0ODI3NTg2MjEsIDkzLjM1MTcyNDEzNzksIDM2Ljk1MTcyNDEzNzkpO1xufVxuLnN0YXR1cy0td2FpdGluZywgLnN0YXR1cy0tcGF5bWVudC1wZW5kaW5nLCAuc3RhdHVzLS1jb25maXJtZWQsIC5zdGF0dXMtLXNlbnQtdG8tbWVyY2hhbnQsIC5zdGF0dXMtLXNoaXBwZWQtYnktbWVyY2hhbnQsIC5zdGF0dXMtLWV4cG9ydGVkLCAuc3RhdHVzLS1ub3QtY29uZmlndXJlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYigyNDkuODUsIDIzMi44MzI2MDg2OTU3LCAyMDguNjUpO1xuICBjb2xvcjogcmdiKDIwNi4xLCAxMzAuNDMwNDM0NzgyNiwgMjIuOSk7XG59XG4uc3RhdHVzLS1jbG9zZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTQwLjI1LCAxNDAuMjUsIDE0MC4yNSk7XG4gIGNvbG9yOiByZ2IoMjUuNSwgMjUuNSwgMjUuNSk7XG59XG4uc3RhdHVzLS1jYW5jZWxlZCwgLnN0YXR1cy0tcmVhZHktZm9yLXJldHVybiwgLnN0YXR1cy0tcmV0dXJuZWQsIC5zdGF0dXMtLXdhaXRpbmctZm9yLXJldHVybiwgLnN0YXR1cy0tcmV0dXJuLWNhbmNlbGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwOC4yNSwgMjA4LjI1LCAyMDguMjUpO1xuICBjb2xvcjogcmdiKDkzLjUsIDkzLjUsIDkzLjUpO1xufVxuLnN0YXR1cy0tZHJhZnQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTY0LjA2OTA3ODk0NzQsIDE2NC4wNjkwNzg5NDc0LCAxNjYuNDMwOTIxMDUyNik7XG4gIGNvbG9yOiByZ2IoNDkuODM1NTI2MzE1OCwgNDkuODM1NTI2MzE1OCwgNTEuMTY0NDczNjg0Mik7XG59XG4uc3RhdHVzLS1zbWFsbCB7XG4gIHBhZGRpbmc6IDAgMS4wNjY2NjY2NjY3cmVtO1xufVxuLnN0YXR1cy0tcmVhZHksIC5zdGF0dXMtLXBhaWQsIC5zdGF0dXMtLWRlbGl2ZXJlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBjb2xvcjogI2ZlY2MwMDtcbn1cbi5zdGF0dXMtLWNhbmNlbGxlZCwgLnN0YXR1cy0tcmVhZHktZm9yLXJldHVybiwgLnN0YXR1cy0tcmV0dXJuZWQsIC5zdGF0dXMtLXdhaXRpbmctZm9yLXJldHVybiwgLnN0YXR1cy0tcmV0dXJuLWNhbmNlbGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGNvbG9yOiAjYjJiMmIyO1xufVxuLnN0YXR1cy0tc2hpcHBlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYigyMDguNDQ5MTAxNzk2NCwgMjAxLjk3MjQ1NTA4OTgsIDI0MC40Mjc1NDQ5MTAyKTtcbiAgY29sb3I6ICMzNDI0ODM7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5zdWdnZXN0LXNlYXJjaF9fY29udGFpbmVyIHtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbiAgbWF4LWhlaWdodDogNTB2aDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMTAwJTtcbiAgdG9wOiAxMzAlO1xuICBtYXJnaW46IC0wLjJyZW0gMCAwIDA7XG4gIHBhZGRpbmc6IDA7XG4gIGJhY2tncm91bmQ6ICNmZmY7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgei1pbmRleDogNzAzO1xuICBkaXNwbGF5OiBub25lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAuc3VnZ2VzdC1zZWFyY2hfX2NvbnRhaW5lciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnN1Z2dlc3Qtc2VhcmNoX19jb250YWluZXIge1xuICAgIG1heC1oZWlnaHQ6IHVuc2V0O1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjVweCkge1xuICAuc3VnZ2VzdC1zZWFyY2hfX2NvbnRhaW5lciB7XG4gICAgbGVmdDogLTE0cmVtO1xuICAgIHdpZHRoOiAxMDI0cHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gIC5zdWdnZXN0LXNlYXJjaF9fY29udGFpbmVyIHtcbiAgICBsZWZ0OiAtMjAuNXJlbTtcbiAgICB3aWR0aDogMTIwMHB4O1xuICB9XG59XG4uc3VnZ2VzdC1zZWFyY2hfX2JveCB7XG4gIG1hcmdpbjogMXJlbSAxcmVtIDA7XG4gIHdpZHRoOiAxMDAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc3VnZ2VzdC1zZWFyY2hfX2JveCB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG4uc3VnZ2VzdC1zZWFyY2hfX2lucHV0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLnN1Z2dlc3Qtc2VhcmNoX19pbnB1dC0tYWN0aXZlIHtcbiAgYm9yZGVyLXJhZGl1czogMTBweCAxMHB4IDAgMDtcbn1cbi5zdWdnZXN0LXNlYXJjaF9faW5wdXQtLXRyYW5zcGFyZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbn1cbi5zdWdnZXN0LXNlYXJjaF9fcHJvZHVjdCB7XG4gIHBhZGRpbmctYm90dG9tOiAwLjY2NjY2NjY2NjdyZW07XG59XG4uc3VnZ2VzdC1zZWFyY2hfX3Byb2R1Y3QtYWN0aW9uIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBlbmQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIHBhZGRpbmctdG9wOiAxLjUzMzMzMzMzMzNyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDFyZW07XG59XG4uc3VnZ2VzdC1zZWFyY2hfX3Byb2R1Y3QtYWN0aW9uIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zdWdnZXN0LXNlYXJjaF9fcHJvZHVjdC1hY3Rpb24ge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgfVxufVxuLnN1Z2dlc3Qtc2VhcmNoX19oaW50IHtcbiAgcGFkZGluZzogMS4yNjY2NjY2NjY3cmVtIDMuMDY2NjY2NjY2N3JlbSAxLjMzMzMzMzMzMzNyZW0gMi44NjY2NjY2NjY3cmVtO1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGNvbG9yOiAjZDBkMGQwO1xuICB0b3A6IDA7XG4gIHotaW5kZXg6IDcwMTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnN1Z2dlc3Qtc2VhcmNoX19oaW50IHtcbiAgICBwYWRkaW5nOiAxcmVtIDFyZW0gMXJlbSAzLjczMzMzMzMzMzNyZW07XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIH1cbn1cbi5zdWdnZXN0LXNlYXJjaF9faGludC0tYWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFhMTcxYjtcbiAgYm9yZGVyLXJhZGl1czogMTBweCAxMHB4IDAgMDtcbn1cbi5zdWdnZXN0LXNlYXJjaCAuc3VnZ2VzdGlvbi1yZXN1bHRzX19jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnN1Z2dlc3Qtc2VhcmNoIC5zdWdnZXN0aW9uLXJlc3VsdHNfX2NvbnRhaW5lciB7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgLXdlYmtpdC1ib3gtcGFjazogc3BhY2UtZXZlbjtcbiAgICAgICAgLW1zLWZsZXgtcGFjazogc3BhY2UtZXZlbjtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtZXZlbjtcbiAgICBwYWRkaW5nOiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zdWdnZXN0LXNlYXJjaCAuc3VnZ2VzdGlvbi1yZXN1bHRzX19yZXNpemUtY29udGFpbmVyIHtcbiAgICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIHBhZGRpbmc6IDEuNXJlbTtcbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgfVxuICAuc3VnZ2VzdC1zZWFyY2ggLnN1Z2dlc3Rpb24tcmVzdWx0c19fcmVzaXplLWNvbnRhaW5lciAuc3VnZ2VzdGlvbi1yZXN1bHRzX19jb2x1bW4ge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDUwJTtcbiAgICAgICAgZmxleC1iYXNpczogNTAlO1xuICB9XG4gIC5zdWdnZXN0LXNlYXJjaCAuc3VnZ2VzdGlvbi1yZXN1bHRzX19yZXNpemUtY29udGFpbmVyIC5zdWdnZXN0aW9uLXJlc3VsdHNfX25vLXJlc3VsdHMge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDUwJTtcbiAgICAgICAgZmxleC1iYXNpczogNTAlO1xuICB9XG59XG4uc3VnZ2VzdC1zZWFyY2ggLnN1Z2dlc3Rpb24tcmVzdWx0c19fcmVzaXplLW5vLXJlc3VsdHMge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbi5zdWdnZXN0LXNlYXJjaCAuc3VnZ2VzdGlvbi1yZXN1bHRzX19jb2x1bW4tLWxlZnQge1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXgtcG9zaXRpdmU6IDE7XG4gICAgICAgICAgZmxleC1ncm93OiAxO1xufVxuLnN1Z2dlc3Qtc2VhcmNoIC5zdWdnZXN0aW9uLXJlc3VsdHNfX2NvbHVtbi0tcmlnaHQge1xuICAtd2Via2l0LWJveC1mbGV4OiAyO1xuICAgICAgLW1zLWZsZXgtcG9zaXRpdmU6IDI7XG4gICAgICAgICAgZmxleC1ncm93OiAyO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc3VnZ2VzdC1zZWFyY2ggLnN1Z2dlc3Rpb24tcmVzdWx0c19fY29sdW1uLS1sZWZ0IHtcbiAgICBtYXgtd2lkdGg6IDQwJTtcbiAgfVxuICAuc3VnZ2VzdC1zZWFyY2ggLnN1Z2dlc3Rpb24tcmVzdWx0c19fY29sdW1uLS1yaWdodCB7XG4gICAgbWFyZ2luOiAxcmVtIDFyZW0gMDtcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY2hlY2tib3gge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4uY2hlY2tib3hfX2NvbnRhaW5lciB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgICAgICAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5jaGVja2JveF9fYm94IHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHdpZHRoOiAxLjQ2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMS40NjY2NjY2NjY3cmVtO1xuICBib3JkZXI6IDAuMDY2NjY2NjY2N3JlbSBzb2xpZCAjZDBkMGQwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBtYXJnaW4tcmlnaHQ6IDAuNjY2NjY2NjY2N3JlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItcmFkaXVzOiAwLjEzMzMzMzMzMzNyZW07XG4gIC13ZWJraXQtYm94LWZsZXg6IDA7XG4gICAgICAtbXMtZmxleDogbm9uZTtcbiAgICAgICAgICBmbGV4OiBub25lO1xufVxuLmNoZWNrYm94X19ib3ggc3ZnIHtcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNoZWNrYm94X19ib3gge1xuICAgIG1hcmdpbi1yaWdodDogMC45MzMzMzMzMzMzcmVtO1xuICAgIHdpZHRoOiAxLjQ2NjY2NjY2NjdyZW07XG4gICAgaGVpZ2h0OiAxLjQ2NjY2NjY2NjdyZW07XG4gIH1cbn1cbi5jaGVja2JveF9fYm94LS1maWx0ZXIge1xuICB3aWR0aDogMS42cmVtO1xuICBoZWlnaHQ6IDEuNnJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNnJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNoZWNrYm94X19ib3gtLWZpbHRlciB7XG4gICAgd2lkdGg6IDEuMTI1cmVtO1xuICAgIGhlaWdodDogMS4xMjVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1cmVtO1xuICB9XG59XG4uY2hlY2tib3hfX2JveC0tc2hvcHBpbmctbGlzdCB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG4gIHotaW5kZXg6IDE7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jaGVja2JveF9fYm94LS1zaG9wcGluZy1saXN0IHtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgIG1hcmdpbi1yaWdodDogMC42NjY2NjY2NjY3cmVtO1xuICB9XG59XG4uY2hlY2tib3hfX2JveC0tYWx0ZXJuYXRpdmUge1xuICBib3JkZXI6IHNvbGlkIDAuMTMzMzMzMzMzM3JlbSAjZDBkMGQwO1xufVxuLmNoZWNrYm94X19pbnB1dCB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBvcGFjaXR5OiAwO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgICBhcHBlYXJhbmNlOiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgd2lkdGg6IDEuNDY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAxLjQ2NjY2NjY2NjdyZW07XG59XG4uY2hlY2tib3hfX2lucHV0OmNoZWNrZWQgfiAuY2hlY2tib3hfX2JveCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbi5jaGVja2JveF9faW5wdXQ6Y2hlY2tlZCB+IC5jaGVja2JveF9fYm94IHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4uY2hlY2tib3hfX2lucHV0OmNoZWNrZWQgfiAuY2hlY2tib3hfX2JveCAuY2hlY2tib3hfX2NoZWNrIHtcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgb3BhY2l0eTogMTtcbn1cbi5jaGVja2JveF9faW5wdXQ6Y2hlY2tlZCB+IC5jaGVja2JveF9fYm94LS1hbHRlcm5hdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbn1cbi5jaGVja2JveF9faW5wdXQ6Y2hlY2tlZCB+IC5jaGVja2JveF9fbGFiZWwge1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbi5jaGVja2JveF9faW5wdXQ6Y2hlY2tlZCB+IC5jaGVja2JveF9fbGFiZWwtLWFsdGVybmF0aXZlIHtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5jaGVja2JveF9faW5wdXQ6Zm9jdXMgfiAuY2hlY2tib3hfX2JveCB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDAgM3B4ICNmZWNjMDA7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICNmZWNjMDA7XG59XG4uY2hlY2tib3hfX2lucHV0W2Rpc2FibGVkXSB+IC5jaGVja2JveF9fYm94LCAuY2hlY2tib3hfX2lucHV0W2Rpc2FibGVkXSB+IC5jaGVja2JveF9fYm94OmhvdmVyLCAuY2hlY2tib3hfX2lucHV0LS1kaXNhYmxlZCB+IC5jaGVja2JveF9fYm94LCAuY2hlY2tib3hfX2lucHV0LS1kaXNhYmxlZCB+IC5jaGVja2JveF9fYm94OmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLWNvbG9yOiAjZWNlY2VjO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLmNoZWNrYm94X19pbnB1dFtkaXNhYmxlZF06Y2hlY2tlZCB+IC5jaGVja2JveF9fYm94LCAuY2hlY2tib3hfX2lucHV0LS1kaXNhYmxlZDpjaGVja2VkIH4gLmNoZWNrYm94X19ib3gge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xufVxuLmNoZWNrYm94X19pbnB1dFtkaXNhYmxlZF0gfiAuY2hlY2tib3hfX2xhYmVsLCAuY2hlY2tib3hfX2lucHV0LS1kaXNhYmxlZCB+IC5jaGVja2JveF9fbGFiZWwge1xuICBjb2xvcjogI2QwZDBkMDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbi5jaGVja2JveF9fY2hlY2sge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBvcGFjaXR5OiAwO1xuICAtd2Via2l0LXRyYW5zaXRpb246IHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQsIG9wYWNpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQsIG9wYWNpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gIGxpbmUtaGVpZ2h0OiAwLjkzMzMzMzMzMzNyZW07XG59XG4uY2hlY2tib3hfX2NoZWNrLS1hbHRlcm5hdGl2ZSB7XG4gIGNvbG9yOiAjZDBkMGQwO1xuICBtYXJnaW4tYm90dG9tOiAwLjEzMzMzMzMzMzNyZW07XG59XG4uY2hlY2tib3hfX2xhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIG1hcmdpbjogMDtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4OiAxO1xuICAgICAgICAgIGZsZXg6IDE7XG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xuICAgICAgZmxleC1iYXNpczogYXV0bztcbn1cbi5jaGVja2JveF9fbGFiZWwtLWZpbHRlciB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcbiAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4uY2hlY2tib3hfX2xhYmVsLS1hbHRlcm5hdGl2ZSB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDEuMzMzMzMzMzMzM3JlbTtcbiAgY29sb3I6ICNkMGQwZDA7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuLmNoZWNrYm94X19jb3VudGVyIHtcbiAgcGFkZGluZy1sZWZ0OiAwLjUzMzMzMzMzMzNyZW07XG59XG4uY2hlY2tib3gtLWV4cGFuZCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG59XG4uY2hlY2tib3gtLWZpbHRlciB7XG4gIHdpZHRoOiAxMDAlO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjJyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jaGVja2JveC0tZmlsdGVyIHtcbiAgICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLmNoZWNrYm94LS1hbHRlcm5hdGl2ZSB7XG4gIG1hcmdpbi1ib3R0b206IDFyZW07XG59XG4uY2hlY2tib3gtLWFsdGVybmF0aXZlOmhvdmVyIC5jaGVja2JveF9fYm94LS1hbHRlcm5hdGl2ZSB7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNoZWNrYm94LS1wZHAge1xuICAgIG1hcmdpbi1sZWZ0OiA4LjhyZW07XG4gIH1cbn1cbi5jaGVja2JveC0tcGRwOmhvdmVyIC5jaGVja2JveF9fYm94LS1hbHRlcm5hdGl2ZSB7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbn1cbi5jaGVja2JveC0tZXJyb3IgLmNoZWNrYm94X19ib3gge1xuICBib3JkZXItY29sb3I6ICNlMzIyMTM7XG59XG4uY2hlY2tib3g6aG92ZXIgLmNoZWNrYm94X19ib3gge1xuICBib3JkZXItY29sb3I6ICNmZWNjMDA7XG59XG4uY2hlY2tib3g6aG92ZXIgLmNoZWNrYm94X19pbnB1dFtkaXNhYmxlZF0gfiAuY2hlY2tib3hfX2JveCxcbi5jaGVja2JveDpob3ZlciAuY2hlY2tib3hfX2lucHV0LS1kaXNhYmxlZCB+IC5jaGVja2JveF9fYm94IHtcbiAgYm9yZGVyLWNvbG9yOiAjZWNlY2VjO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAuY2hlY2tib3gudG9vbHRpcC1wb3NpdGlvbi1sZWZ0LWxnIC50b29sdGlwLWJ1dHRvbl9fdG9vbHRpcCB7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLmNoZWNrYm94LnRvb2x0aXAtcG9zaXRpb24tbGVmdC1sZyAudG9vbHRpcC1idXR0b25fX3Rvb2x0aXA6OmFmdGVyIHtcbiAgICByaWdodDogNCU7XG4gIH1cbiAgLmNoZWNrYm94LnRvb2x0aXAtcG9zaXRpb24tbGVmdC1sZyAudG9vbHRpcC1idXR0b25fX3Rvb2x0aXAtY29udGFpbmVyIHtcbiAgICBsZWZ0OiBhdXRvO1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBub25lO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG59XG5cbi50b2dnbGVyLWNoZWNrYm94IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLnRvZ2dsZXItY2hlY2tib3hfX2NvbnRhaW5lciB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgICAgICAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi50b2dnbGVyLWNoZWNrYm94X19ib3gge1xuICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAyNTBtcyBlYXNlLWluLW91dCwgYm9yZGVyLWNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgd2lkdGg6IDEuNDY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAxLjQ2NjY2NjY2NjdyZW07XG4gIGJvcmRlcjogMC4wNjY2NjY2NjY3cmVtIHNvbGlkICNkMGQwZDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIG1hcmdpbi1yaWdodDogMC42NjY2NjY2NjY3cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IDAuMTMzMzMzMzMzM3JlbTtcbiAgLXdlYmtpdC1ib3gtZmxleDogMDtcbiAgICAgIC1tcy1mbGV4OiBub25lO1xuICAgICAgICAgIGZsZXg6IG5vbmU7XG59XG4udG9nZ2xlci1jaGVja2JveF9fYm94IHN2ZyB7XG4gIHdpZHRoOiAxcmVtO1xuICBoZWlnaHQ6IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC50b2dnbGVyLWNoZWNrYm94X19ib3gge1xuICAgIG1hcmdpbi1yaWdodDogMC45MzMzMzMzMzMzcmVtO1xuICAgIHdpZHRoOiAxLjQ2NjY2NjY2NjdyZW07XG4gICAgaGVpZ2h0OiAxLjQ2NjY2NjY2NjdyZW07XG4gIH1cbn1cbi50b2dnbGVyLWNoZWNrYm94X19ib3gtLWZpbHRlciB7XG4gIHdpZHRoOiAxLjZyZW07XG4gIGhlaWdodDogMS42cmVtO1xuICBsaW5lLWhlaWdodDogMS42cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAudG9nZ2xlci1jaGVja2JveF9fYm94LS1maWx0ZXIge1xuICAgIHdpZHRoOiAxLjEyNXJlbTtcbiAgICBoZWlnaHQ6IDEuMTI1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNXJlbTtcbiAgfVxufVxuLnRvZ2dsZXItY2hlY2tib3hfX2JveC0tc2hvcHBpbmctbGlzdCB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG4gIHotaW5kZXg6IDE7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC50b2dnbGVyLWNoZWNrYm94X19ib3gtLXNob3BwaW5nLWxpc3Qge1xuICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgbWFyZ2luLXJpZ2h0OiAwLjY2NjY2NjY2NjdyZW07XG4gIH1cbn1cbi50b2dnbGVyLWNoZWNrYm94X19ib3gtLWFsdGVybmF0aXZlIHtcbiAgYm9yZGVyOiBzb2xpZCAwLjEzMzMzMzMzMzNyZW0gI2QwZDBkMDtcbn1cbi50b2dnbGVyLWNoZWNrYm94X19pbnB1dCB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBvcGFjaXR5OiAwO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgICBhcHBlYXJhbmNlOiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgd2lkdGg6IDEuNDY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAxLjQ2NjY2NjY2NjdyZW07XG59XG4udG9nZ2xlci1jaGVja2JveF9faW5wdXQ6Y2hlY2tlZCB+IC50b2dnbGVyLWNoZWNrYm94X19ib3gge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4udG9nZ2xlci1jaGVja2JveF9faW5wdXQ6Y2hlY2tlZCB+IC50b2dnbGVyLWNoZWNrYm94X19ib3ggc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi50b2dnbGVyLWNoZWNrYm94X19pbnB1dDpjaGVja2VkIH4gLnRvZ2dsZXItY2hlY2tib3hfX2JveCAudG9nZ2xlci1jaGVja2JveF9fY2hlY2sge1xuICBwb2ludGVyLWV2ZW50czogYWxsO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBvcGFjaXR5OiAxO1xufVxuLnRvZ2dsZXItY2hlY2tib3hfX2lucHV0OmNoZWNrZWQgfiAudG9nZ2xlci1jaGVja2JveF9fYm94LS1hbHRlcm5hdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbn1cbi50b2dnbGVyLWNoZWNrYm94X19pbnB1dDpjaGVja2VkIH4gLnRvZ2dsZXItY2hlY2tib3hfX2xhYmVsIHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4udG9nZ2xlci1jaGVja2JveF9faW5wdXQ6Y2hlY2tlZCB+IC50b2dnbGVyLWNoZWNrYm94X19sYWJlbC0tYWx0ZXJuYXRpdmUge1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLnRvZ2dsZXItY2hlY2tib3hfX2lucHV0OmZvY3VzIH4gLnRvZ2dsZXItY2hlY2tib3hfX2JveCB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDAgM3B4ICNmZWNjMDA7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICNmZWNjMDA7XG59XG4udG9nZ2xlci1jaGVja2JveF9faW5wdXRbZGlzYWJsZWRdIH4gLnRvZ2dsZXItY2hlY2tib3hfX2JveCwgLnRvZ2dsZXItY2hlY2tib3hfX2lucHV0W2Rpc2FibGVkXSB+IC50b2dnbGVyLWNoZWNrYm94X19ib3g6aG92ZXIsIC50b2dnbGVyLWNoZWNrYm94X19pbnB1dC0tZGlzYWJsZWQgfiAudG9nZ2xlci1jaGVja2JveF9fYm94LCAudG9nZ2xlci1jaGVja2JveF9faW5wdXQtLWRpc2FibGVkIH4gLnRvZ2dsZXItY2hlY2tib3hfX2JveDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogI2VjZWNlYztcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbi50b2dnbGVyLWNoZWNrYm94X19pbnB1dFtkaXNhYmxlZF06Y2hlY2tlZCB+IC50b2dnbGVyLWNoZWNrYm94X19ib3gsIC50b2dnbGVyLWNoZWNrYm94X19pbnB1dC0tZGlzYWJsZWQ6Y2hlY2tlZCB+IC50b2dnbGVyLWNoZWNrYm94X19ib3gge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xufVxuLnRvZ2dsZXItY2hlY2tib3hfX2lucHV0W2Rpc2FibGVkXSB+IC50b2dnbGVyLWNoZWNrYm94X19sYWJlbCwgLnRvZ2dsZXItY2hlY2tib3hfX2lucHV0LS1kaXNhYmxlZCB+IC50b2dnbGVyLWNoZWNrYm94X19sYWJlbCB7XG4gIGNvbG9yOiAjZDBkMGQwO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLnRvZ2dsZXItY2hlY2tib3hfX2NoZWNrIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgb3BhY2l0eTogMDtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0LCBvcGFjaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0LCBvcGFjaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICBsaW5lLWhlaWdodDogMC45MzMzMzMzMzMzcmVtO1xufVxuLnRvZ2dsZXItY2hlY2tib3hfX2NoZWNrLS1hbHRlcm5hdGl2ZSB7XG4gIGNvbG9yOiAjZDBkMGQwO1xuICBtYXJnaW4tYm90dG9tOiAwLjEzMzMzMzMzMzNyZW07XG59XG4udG9nZ2xlci1jaGVja2JveF9fbGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbWFyZ2luOiAwO1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXg6IDE7XG4gICAgICAgICAgZmxleDogMTtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XG4gICAgICBmbGV4LWJhc2lzOiBhdXRvO1xufVxuLnRvZ2dsZXItY2hlY2tib3hfX2xhYmVsLS1maWx0ZXIge1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXgtcG9zaXRpdmU6IDE7XG4gICAgICAgICAgZmxleC1ncm93OiAxO1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLnRvZ2dsZXItY2hlY2tib3hfX2xhYmVsLS1hbHRlcm5hdGl2ZSB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDEuMzMzMzMzMzMzM3JlbTtcbiAgY29sb3I6ICNkMGQwZDA7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuLnRvZ2dsZXItY2hlY2tib3hfX2NvdW50ZXIge1xuICBwYWRkaW5nLWxlZnQ6IDAuNTMzMzMzMzMzM3JlbTtcbn1cbi50b2dnbGVyLWNoZWNrYm94LS1leHBhbmQge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIC13ZWJraXQtYm94LXBhY2s6IHN0YXJ0O1xuICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuLnRvZ2dsZXItY2hlY2tib3gtLWZpbHRlciB7XG4gIHdpZHRoOiAxMDAlO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjJyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC50b2dnbGVyLWNoZWNrYm94LS1maWx0ZXIge1xuICAgIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICB9XG59XG4udG9nZ2xlci1jaGVja2JveC0tYWx0ZXJuYXRpdmUge1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xufVxuLnRvZ2dsZXItY2hlY2tib3gtLWFsdGVybmF0aXZlOmhvdmVyIC50b2dnbGVyLWNoZWNrYm94X19ib3gtLWFsdGVybmF0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAudG9nZ2xlci1jaGVja2JveC0tcGRwIHtcbiAgICBtYXJnaW4tbGVmdDogOC44cmVtO1xuICB9XG59XG4udG9nZ2xlci1jaGVja2JveC0tcGRwOmhvdmVyIC50b2dnbGVyLWNoZWNrYm94X19ib3gtLWFsdGVybmF0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xufVxuLnRvZ2dsZXItY2hlY2tib3gtLWVycm9yIC50b2dnbGVyLWNoZWNrYm94X19ib3gge1xuICBib3JkZXItY29sb3I6ICNlMzIyMTM7XG59XG4udG9nZ2xlci1jaGVja2JveDpob3ZlciAudG9nZ2xlci1jaGVja2JveF9fYm94IHtcbiAgYm9yZGVyLWNvbG9yOiAjZmVjYzAwO1xufVxuLnRvZ2dsZXItY2hlY2tib3g6aG92ZXIgLnRvZ2dsZXItY2hlY2tib3hfX2lucHV0W2Rpc2FibGVkXSB+IC50b2dnbGVyLWNoZWNrYm94X19ib3gsXG4udG9nZ2xlci1jaGVja2JveDpob3ZlciAudG9nZ2xlci1jaGVja2JveF9faW5wdXQtLWRpc2FibGVkIH4gLnRvZ2dsZXItY2hlY2tib3hfX2JveCB7XG4gIGJvcmRlci1jb2xvcjogI2VjZWNlYztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLnRvZ2dsZXItY2hlY2tib3gudG9vbHRpcC1wb3NpdGlvbi1sZWZ0LWxnIC50b29sdGlwLWJ1dHRvbl9fdG9vbHRpcCB7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLnRvZ2dsZXItY2hlY2tib3gudG9vbHRpcC1wb3NpdGlvbi1sZWZ0LWxnIC50b29sdGlwLWJ1dHRvbl9fdG9vbHRpcDo6YWZ0ZXIge1xuICAgIHJpZ2h0OiA0JTtcbiAgfVxuICAudG9nZ2xlci1jaGVja2JveC50b29sdGlwLXBvc2l0aW9uLWxlZnQtbGcgLnRvb2x0aXAtYnV0dG9uX190b29sdGlwLWNvbnRhaW5lciB7XG4gICAgbGVmdDogYXV0bztcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgfVxufVxuLnRvZ2dsZXItY2hlY2tib3hfX2lucHV0OmNoZWNrZWQgfiAudG9nZ2xlci1jaGVja2JveF9fbGFiZWwge1xuICBmb250LXdlaWdodDogNDAwO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY2hlY2tib3gge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4uY2hlY2tib3hfX2NvbnRhaW5lciB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgICAgICAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5jaGVja2JveF9fYm94IHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHdpZHRoOiAxLjQ2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMS40NjY2NjY2NjY3cmVtO1xuICBib3JkZXI6IDAuMDY2NjY2NjY2N3JlbSBzb2xpZCAjZDBkMGQwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBtYXJnaW4tcmlnaHQ6IDAuNjY2NjY2NjY2N3JlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItcmFkaXVzOiAwLjEzMzMzMzMzMzNyZW07XG4gIC13ZWJraXQtYm94LWZsZXg6IDA7XG4gICAgICAtbXMtZmxleDogbm9uZTtcbiAgICAgICAgICBmbGV4OiBub25lO1xufVxuLmNoZWNrYm94X19ib3ggc3ZnIHtcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNoZWNrYm94X19ib3gge1xuICAgIG1hcmdpbi1yaWdodDogMC45MzMzMzMzMzMzcmVtO1xuICAgIHdpZHRoOiAxLjQ2NjY2NjY2NjdyZW07XG4gICAgaGVpZ2h0OiAxLjQ2NjY2NjY2NjdyZW07XG4gIH1cbn1cbi5jaGVja2JveF9fYm94LS1maWx0ZXIge1xuICB3aWR0aDogMS42cmVtO1xuICBoZWlnaHQ6IDEuNnJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNnJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNoZWNrYm94X19ib3gtLWZpbHRlciB7XG4gICAgd2lkdGg6IDEuMTI1cmVtO1xuICAgIGhlaWdodDogMS4xMjVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMTI1cmVtO1xuICB9XG59XG4uY2hlY2tib3hfX2JveC0tc2hvcHBpbmctbGlzdCB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG4gIHotaW5kZXg6IDE7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jaGVja2JveF9fYm94LS1zaG9wcGluZy1saXN0IHtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgIG1hcmdpbi1yaWdodDogMC42NjY2NjY2NjY3cmVtO1xuICB9XG59XG4uY2hlY2tib3hfX2JveC0tYWx0ZXJuYXRpdmUge1xuICBib3JkZXI6IHNvbGlkIDAuMTMzMzMzMzMzM3JlbSAjZDBkMGQwO1xufVxuLmNoZWNrYm94X19pbnB1dCB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBvcGFjaXR5OiAwO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgICBhcHBlYXJhbmNlOiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgd2lkdGg6IDEuNDY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAxLjQ2NjY2NjY2NjdyZW07XG59XG4uY2hlY2tib3hfX2lucHV0OmNoZWNrZWQgfiAuY2hlY2tib3hfX2JveCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbi5jaGVja2JveF9faW5wdXQ6Y2hlY2tlZCB+IC5jaGVja2JveF9fYm94IHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4uY2hlY2tib3hfX2lucHV0OmNoZWNrZWQgfiAuY2hlY2tib3hfX2JveCAuY2hlY2tib3hfX2NoZWNrIHtcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgb3BhY2l0eTogMTtcbn1cbi5jaGVja2JveF9faW5wdXQ6Y2hlY2tlZCB+IC5jaGVja2JveF9fYm94LS1hbHRlcm5hdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbn1cbi5jaGVja2JveF9faW5wdXQ6Y2hlY2tlZCB+IC5jaGVja2JveF9fbGFiZWwge1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbi5jaGVja2JveF9faW5wdXQ6Y2hlY2tlZCB+IC5jaGVja2JveF9fbGFiZWwtLWFsdGVybmF0aXZlIHtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5jaGVja2JveF9faW5wdXQ6Zm9jdXMgfiAuY2hlY2tib3hfX2JveCB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDAgM3B4ICNmZWNjMDA7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICNmZWNjMDA7XG59XG4uY2hlY2tib3hfX2lucHV0W2Rpc2FibGVkXSB+IC5jaGVja2JveF9fYm94LCAuY2hlY2tib3hfX2lucHV0W2Rpc2FibGVkXSB+IC5jaGVja2JveF9fYm94OmhvdmVyLCAuY2hlY2tib3hfX2lucHV0LS1kaXNhYmxlZCB+IC5jaGVja2JveF9fYm94LCAuY2hlY2tib3hfX2lucHV0LS1kaXNhYmxlZCB+IC5jaGVja2JveF9fYm94OmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLWNvbG9yOiAjZWNlY2VjO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLmNoZWNrYm94X19pbnB1dFtkaXNhYmxlZF06Y2hlY2tlZCB+IC5jaGVja2JveF9fYm94LCAuY2hlY2tib3hfX2lucHV0LS1kaXNhYmxlZDpjaGVja2VkIH4gLmNoZWNrYm94X19ib3gge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xufVxuLmNoZWNrYm94X19pbnB1dFtkaXNhYmxlZF0gfiAuY2hlY2tib3hfX2xhYmVsLCAuY2hlY2tib3hfX2lucHV0LS1kaXNhYmxlZCB+IC5jaGVja2JveF9fbGFiZWwge1xuICBjb2xvcjogI2QwZDBkMDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbi5jaGVja2JveF9fY2hlY2sge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBvcGFjaXR5OiAwO1xuICAtd2Via2l0LXRyYW5zaXRpb246IHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQsIG9wYWNpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQsIG9wYWNpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gIGxpbmUtaGVpZ2h0OiAwLjkzMzMzMzMzMzNyZW07XG59XG4uY2hlY2tib3hfX2NoZWNrLS1hbHRlcm5hdGl2ZSB7XG4gIGNvbG9yOiAjZDBkMGQwO1xuICBtYXJnaW4tYm90dG9tOiAwLjEzMzMzMzMzMzNyZW07XG59XG4uY2hlY2tib3hfX2xhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIG1hcmdpbjogMDtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4OiAxO1xuICAgICAgICAgIGZsZXg6IDE7XG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xuICAgICAgZmxleC1iYXNpczogYXV0bztcbn1cbi5jaGVja2JveF9fbGFiZWwtLWZpbHRlciB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcbiAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4uY2hlY2tib3hfX2xhYmVsLS1hbHRlcm5hdGl2ZSB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDEuMzMzMzMzMzMzM3JlbTtcbiAgY29sb3I6ICNkMGQwZDA7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuLmNoZWNrYm94X19jb3VudGVyIHtcbiAgcGFkZGluZy1sZWZ0OiAwLjUzMzMzMzMzMzNyZW07XG59XG4uY2hlY2tib3gtLWV4cGFuZCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG59XG4uY2hlY2tib3gtLWZpbHRlciB7XG4gIHdpZHRoOiAxMDAlO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjJyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jaGVja2JveC0tZmlsdGVyIHtcbiAgICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLmNoZWNrYm94LS1hbHRlcm5hdGl2ZSB7XG4gIG1hcmdpbi1ib3R0b206IDFyZW07XG59XG4uY2hlY2tib3gtLWFsdGVybmF0aXZlOmhvdmVyIC5jaGVja2JveF9fYm94LS1hbHRlcm5hdGl2ZSB7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNoZWNrYm94LS1wZHAge1xuICAgIG1hcmdpbi1sZWZ0OiA4LjhyZW07XG4gIH1cbn1cbi5jaGVja2JveC0tcGRwOmhvdmVyIC5jaGVja2JveF9fYm94LS1hbHRlcm5hdGl2ZSB7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbn1cbi5jaGVja2JveC0tZXJyb3IgLmNoZWNrYm94X19ib3gge1xuICBib3JkZXItY29sb3I6ICNlMzIyMTM7XG59XG4uY2hlY2tib3g6aG92ZXIgLmNoZWNrYm94X19ib3gge1xuICBib3JkZXItY29sb3I6ICNmZWNjMDA7XG59XG4uY2hlY2tib3g6aG92ZXIgLmNoZWNrYm94X19pbnB1dFtkaXNhYmxlZF0gfiAuY2hlY2tib3hfX2JveCxcbi5jaGVja2JveDpob3ZlciAuY2hlY2tib3hfX2lucHV0LS1kaXNhYmxlZCB+IC5jaGVja2JveF9fYm94IHtcbiAgYm9yZGVyLWNvbG9yOiAjZWNlY2VjO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAuY2hlY2tib3gudG9vbHRpcC1wb3NpdGlvbi1sZWZ0LWxnIC50b29sdGlwLWJ1dHRvbl9fdG9vbHRpcCB7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLmNoZWNrYm94LnRvb2x0aXAtcG9zaXRpb24tbGVmdC1sZyAudG9vbHRpcC1idXR0b25fX3Rvb2x0aXA6OmFmdGVyIHtcbiAgICByaWdodDogNCU7XG4gIH1cbiAgLmNoZWNrYm94LnRvb2x0aXAtcG9zaXRpb24tbGVmdC1sZyAudG9vbHRpcC1idXR0b25fX3Rvb2x0aXAtY29udGFpbmVyIHtcbiAgICBsZWZ0OiBhdXRvO1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBub25lO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG59XG5cbi5yYWRpbyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5yYWRpb19fY29udGFpbmVyIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1mbG93OiByb3cgbm93cmFwO1xuICAgICAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLnJhZGlvX19ib3gge1xuICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAyNTBtcyBlYXNlLWluLW91dCwgYm9yZGVyLWNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgd2lkdGg6IDEuNDY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAxLjQ2NjY2NjY2NjdyZW07XG4gIGJvcmRlcjogMC4wNjY2NjY2NjY3cmVtIHNvbGlkICNkMGQwZDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIG1hcmdpbi1yaWdodDogMC42NjY2NjY2NjY3cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IDAuMTMzMzMzMzMzM3JlbTtcbiAgLXdlYmtpdC1ib3gtZmxleDogMDtcbiAgICAgIC1tcy1mbGV4OiBub25lO1xuICAgICAgICAgIGZsZXg6IG5vbmU7XG59XG4ucmFkaW9fX2JveCBzdmcge1xuICB3aWR0aDogMXJlbTtcbiAgaGVpZ2h0OiAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucmFkaW9fX2JveCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwLjkzMzMzMzMzMzNyZW07XG4gICAgd2lkdGg6IDEuNDY2NjY2NjY2N3JlbTtcbiAgICBoZWlnaHQ6IDEuNDY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLnJhZGlvX19ib3gtLWZpbHRlciB7XG4gIHdpZHRoOiAxLjZyZW07XG4gIGhlaWdodDogMS42cmVtO1xuICBsaW5lLWhlaWdodDogMS42cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucmFkaW9fX2JveC0tZmlsdGVyIHtcbiAgICB3aWR0aDogMS4xMjVyZW07XG4gICAgaGVpZ2h0OiAxLjEyNXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4xMjVyZW07XG4gIH1cbn1cbi5yYWRpb19fYm94LS1zaG9wcGluZy1saXN0IHtcbiAgcG9zaXRpb246IHN0YXRpYztcbiAgei1pbmRleDogMTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnJhZGlvX19ib3gtLXNob3BwaW5nLWxpc3Qge1xuICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgbWFyZ2luLXJpZ2h0OiAwLjY2NjY2NjY2NjdyZW07XG4gIH1cbn1cbi5yYWRpb19fYm94LS1hbHRlcm5hdGl2ZSB7XG4gIGJvcmRlcjogc29saWQgMC4xMzMzMzMzMzMzcmVtICNkMGQwZDA7XG59XG4ucmFkaW9fX2lucHV0IHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIG9wYWNpdHk6IDA7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICB3aWR0aDogMS40NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDEuNDY2NjY2NjY2N3JlbTtcbn1cbi5yYWRpb19faW5wdXQ6Y2hlY2tlZCB+IC5yYWRpb19fYm94IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLnJhZGlvX19pbnB1dDpjaGVja2VkIH4gLnJhZGlvX19ib3ggc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi5yYWRpb19faW5wdXQ6Y2hlY2tlZCB+IC5yYWRpb19fYm94IC5yYWRpb19fY2hlY2sge1xuICBwb2ludGVyLWV2ZW50czogYWxsO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBvcGFjaXR5OiAxO1xufVxuLnJhZGlvX19pbnB1dDpjaGVja2VkIH4gLnJhZGlvX19ib3gtLWFsdGVybmF0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xufVxuLnJhZGlvX19pbnB1dDpjaGVja2VkIH4gLnJhZGlvX19sYWJlbCB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLnJhZGlvX19pbnB1dDpjaGVja2VkIH4gLnJhZGlvX19sYWJlbC0tYWx0ZXJuYXRpdmUge1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLnJhZGlvX19pbnB1dDpmb2N1cyB+IC5yYWRpb19fYm94IHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMCAzcHggI2ZlY2MwMDtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggI2ZlY2MwMDtcbn1cbi5yYWRpb19faW5wdXRbZGlzYWJsZWRdIH4gLnJhZGlvX19ib3gsIC5yYWRpb19faW5wdXRbZGlzYWJsZWRdIH4gLnJhZGlvX19ib3g6aG92ZXIsIC5yYWRpb19faW5wdXQtLWRpc2FibGVkIH4gLnJhZGlvX19ib3gsIC5yYWRpb19faW5wdXQtLWRpc2FibGVkIH4gLnJhZGlvX19ib3g6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXItY29sb3I6ICNlY2VjZWM7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4ucmFkaW9fX2lucHV0W2Rpc2FibGVkXTpjaGVja2VkIH4gLnJhZGlvX19ib3gsIC5yYWRpb19faW5wdXQtLWRpc2FibGVkOmNoZWNrZWQgfiAucmFkaW9fX2JveCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7XG59XG4ucmFkaW9fX2lucHV0W2Rpc2FibGVkXSB+IC5yYWRpb19fbGFiZWwsIC5yYWRpb19faW5wdXQtLWRpc2FibGVkIH4gLnJhZGlvX19sYWJlbCB7XG4gIGNvbG9yOiAjZDBkMGQwO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLnJhZGlvX19jaGVjayB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIG9wYWNpdHk6IDA7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAyNTBtcyBlYXNlLWluLW91dCwgb3BhY2l0eSAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAyNTBtcyBlYXNlLWluLW91dCwgb3BhY2l0eSAyNTBtcyBlYXNlLWluLW91dDtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgbGluZS1oZWlnaHQ6IDAuOTMzMzMzMzMzM3JlbTtcbn1cbi5yYWRpb19fY2hlY2stLWFsdGVybmF0aXZlIHtcbiAgY29sb3I6ICNkMGQwZDA7XG4gIG1hcmdpbi1ib3R0b206IDAuMTMzMzMzMzMzM3JlbTtcbn1cbi5yYWRpb19fbGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbWFyZ2luOiAwO1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXg6IDE7XG4gICAgICAgICAgZmxleDogMTtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XG4gICAgICBmbGV4LWJhc2lzOiBhdXRvO1xufVxuLnJhZGlvX19sYWJlbC0tZmlsdGVyIHtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xuICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5yYWRpb19fbGFiZWwtLWFsdGVybmF0aXZlIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBsaW5lLWhlaWdodDogMS4zMzMzMzMzMzMzcmVtO1xuICBjb2xvcjogI2QwZDBkMDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG59XG4ucmFkaW9fX2NvdW50ZXIge1xuICBwYWRkaW5nLWxlZnQ6IDAuNTMzMzMzMzMzM3JlbTtcbn1cbi5yYWRpby0tZXhwYW5kIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbn1cbi5yYWRpby0tZmlsdGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMnJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnJhZGlvLS1maWx0ZXIge1xuICAgIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICB9XG59XG4ucmFkaW8tLWFsdGVybmF0aXZlIHtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbn1cbi5yYWRpby0tYWx0ZXJuYXRpdmU6aG92ZXIgLnJhZGlvX19ib3gtLWFsdGVybmF0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucmFkaW8tLXBkcCB7XG4gICAgbWFyZ2luLWxlZnQ6IDguOHJlbTtcbiAgfVxufVxuLnJhZGlvLS1wZHA6aG92ZXIgLnJhZGlvX19ib3gtLWFsdGVybmF0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xufVxuLnJhZGlvLS1lcnJvciAucmFkaW9fX2JveCB7XG4gIGJvcmRlci1jb2xvcjogI2UzMjIxMztcbn1cbi5yYWRpbzpob3ZlciAucmFkaW9fX2JveCB7XG4gIGJvcmRlci1jb2xvcjogI2ZlY2MwMDtcbn1cbi5yYWRpbzpob3ZlciAucmFkaW9fX2lucHV0W2Rpc2FibGVkXSB+IC5yYWRpb19fYm94LFxuLnJhZGlvOmhvdmVyIC5yYWRpb19faW5wdXQtLWRpc2FibGVkIH4gLnJhZGlvX19ib3gge1xuICBib3JkZXItY29sb3I6ICNlY2VjZWM7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5yYWRpby50b29sdGlwLXBvc2l0aW9uLWxlZnQtbGcgLnRvb2x0aXAtYnV0dG9uX190b29sdGlwIHtcbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICAgIC8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgfVxuICAucmFkaW8udG9vbHRpcC1wb3NpdGlvbi1sZWZ0LWxnIC50b29sdGlwLWJ1dHRvbl9fdG9vbHRpcDo6YWZ0ZXIge1xuICAgIHJpZ2h0OiA0JTtcbiAgfVxuICAucmFkaW8udG9vbHRpcC1wb3NpdGlvbi1sZWZ0LWxnIC50b29sdGlwLWJ1dHRvbl9fdG9vbHRpcC1jb250YWluZXIge1xuICAgIGxlZnQ6IGF1dG87XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IG5vbmU7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IG5vbmU7XG4gIH1cbn1cbi5yYWRpby0tbW9iaWxlLXNtYWxsIC5yYWRpb19fYm94IHtcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbn1cbi5yYWRpb19fYm94IHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgYm9yZGVyLXdpZHRoOiAwLjEzMzMzMzMzMzNyZW07XG59XG4ucmFkaW9fX2NoZWNrIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5yYWRpb19fbGFiZWwge1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbkBtZWRpYSBhbGwgYW5kICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSksICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSB7XG4gIC5yYWRpb19fbGFiZWwge1xuICAgIC1tcy1mbGV4LW5lZ2F0aXZlOiAwO1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0bztcbiAgICAgICAgZmxleC1iYXNpczogYXV0bztcbiAgfVxufVxuLnJhZGlvX19pbnB1dDpjaGVja2VkIH4gLnJhZGlvX19ib3gge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGI0YjRkO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDAuMzJyZW0gI2ZmZjtcbiAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAwLjMycmVtICNmZmY7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbiAgYm9yZGVyLXdpZHRoOiAxcHggIWltcG9ydGFudDtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xufVxuLnJhZGlvX19pbnB1dDpjaGVja2VkIH4gLnJhZGlvX19sYWJlbCB7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG5cbi50b2dnbGVyLXJhZGlvIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLnRvZ2dsZXItcmFkaW9fX2NvbnRhaW5lciB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgICAgICAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi50b2dnbGVyLXJhZGlvX19ib3gge1xuICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAyNTBtcyBlYXNlLWluLW91dCwgYm9yZGVyLWNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgd2lkdGg6IDEuNDY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAxLjQ2NjY2NjY2NjdyZW07XG4gIGJvcmRlcjogMC4wNjY2NjY2NjY3cmVtIHNvbGlkICNkMGQwZDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIG1hcmdpbi1yaWdodDogMC42NjY2NjY2NjY3cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IDAuMTMzMzMzMzMzM3JlbTtcbiAgLXdlYmtpdC1ib3gtZmxleDogMDtcbiAgICAgIC1tcy1mbGV4OiBub25lO1xuICAgICAgICAgIGZsZXg6IG5vbmU7XG59XG4udG9nZ2xlci1yYWRpb19fYm94IHN2ZyB7XG4gIHdpZHRoOiAxcmVtO1xuICBoZWlnaHQ6IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC50b2dnbGVyLXJhZGlvX19ib3gge1xuICAgIG1hcmdpbi1yaWdodDogMC45MzMzMzMzMzMzcmVtO1xuICAgIHdpZHRoOiAxLjQ2NjY2NjY2NjdyZW07XG4gICAgaGVpZ2h0OiAxLjQ2NjY2NjY2NjdyZW07XG4gIH1cbn1cbi50b2dnbGVyLXJhZGlvX19ib3gtLWZpbHRlciB7XG4gIHdpZHRoOiAxLjZyZW07XG4gIGhlaWdodDogMS42cmVtO1xuICBsaW5lLWhlaWdodDogMS42cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAudG9nZ2xlci1yYWRpb19fYm94LS1maWx0ZXIge1xuICAgIHdpZHRoOiAxLjEyNXJlbTtcbiAgICBoZWlnaHQ6IDEuMTI1cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjEyNXJlbTtcbiAgfVxufVxuLnRvZ2dsZXItcmFkaW9fX2JveC0tc2hvcHBpbmctbGlzdCB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG4gIHotaW5kZXg6IDE7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC50b2dnbGVyLXJhZGlvX19ib3gtLXNob3BwaW5nLWxpc3Qge1xuICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgbWFyZ2luLXJpZ2h0OiAwLjY2NjY2NjY2NjdyZW07XG4gIH1cbn1cbi50b2dnbGVyLXJhZGlvX19ib3gtLWFsdGVybmF0aXZlIHtcbiAgYm9yZGVyOiBzb2xpZCAwLjEzMzMzMzMzMzNyZW0gI2QwZDBkMDtcbn1cbi50b2dnbGVyLXJhZGlvX19pbnB1dCB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBvcGFjaXR5OiAwO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgICBhcHBlYXJhbmNlOiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgd2lkdGg6IDEuNDY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAxLjQ2NjY2NjY2NjdyZW07XG59XG4udG9nZ2xlci1yYWRpb19faW5wdXQ6Y2hlY2tlZCB+IC50b2dnbGVyLXJhZGlvX19ib3gge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4udG9nZ2xlci1yYWRpb19faW5wdXQ6Y2hlY2tlZCB+IC50b2dnbGVyLXJhZGlvX19ib3ggc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi50b2dnbGVyLXJhZGlvX19pbnB1dDpjaGVja2VkIH4gLnRvZ2dsZXItcmFkaW9fX2JveCAudG9nZ2xlci1yYWRpb19fY2hlY2sge1xuICBwb2ludGVyLWV2ZW50czogYWxsO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBvcGFjaXR5OiAxO1xufVxuLnRvZ2dsZXItcmFkaW9fX2lucHV0OmNoZWNrZWQgfiAudG9nZ2xlci1yYWRpb19fYm94LS1hbHRlcm5hdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbn1cbi50b2dnbGVyLXJhZGlvX19pbnB1dDpjaGVja2VkIH4gLnRvZ2dsZXItcmFkaW9fX2xhYmVsIHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4udG9nZ2xlci1yYWRpb19faW5wdXQ6Y2hlY2tlZCB+IC50b2dnbGVyLXJhZGlvX19sYWJlbC0tYWx0ZXJuYXRpdmUge1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLnRvZ2dsZXItcmFkaW9fX2lucHV0OmZvY3VzIH4gLnRvZ2dsZXItcmFkaW9fX2JveCB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDAgM3B4ICNmZWNjMDA7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICNmZWNjMDA7XG59XG4udG9nZ2xlci1yYWRpb19faW5wdXRbZGlzYWJsZWRdIH4gLnRvZ2dsZXItcmFkaW9fX2JveCwgLnRvZ2dsZXItcmFkaW9fX2lucHV0W2Rpc2FibGVkXSB+IC50b2dnbGVyLXJhZGlvX19ib3g6aG92ZXIsIC50b2dnbGVyLXJhZGlvX19pbnB1dC0tZGlzYWJsZWQgfiAudG9nZ2xlci1yYWRpb19fYm94LCAudG9nZ2xlci1yYWRpb19faW5wdXQtLWRpc2FibGVkIH4gLnRvZ2dsZXItcmFkaW9fX2JveDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogI2VjZWNlYztcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cbi50b2dnbGVyLXJhZGlvX19pbnB1dFtkaXNhYmxlZF06Y2hlY2tlZCB+IC50b2dnbGVyLXJhZGlvX19ib3gsIC50b2dnbGVyLXJhZGlvX19pbnB1dC0tZGlzYWJsZWQ6Y2hlY2tlZCB+IC50b2dnbGVyLXJhZGlvX19ib3gge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xufVxuLnRvZ2dsZXItcmFkaW9fX2lucHV0W2Rpc2FibGVkXSB+IC50b2dnbGVyLXJhZGlvX19sYWJlbCwgLnRvZ2dsZXItcmFkaW9fX2lucHV0LS1kaXNhYmxlZCB+IC50b2dnbGVyLXJhZGlvX19sYWJlbCB7XG4gIGNvbG9yOiAjZDBkMGQwO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLnRvZ2dsZXItcmFkaW9fX2NoZWNrIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgb3BhY2l0eTogMDtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0LCBvcGFjaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0LCBvcGFjaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICBsaW5lLWhlaWdodDogMC45MzMzMzMzMzMzcmVtO1xufVxuLnRvZ2dsZXItcmFkaW9fX2NoZWNrLS1hbHRlcm5hdGl2ZSB7XG4gIGNvbG9yOiAjZDBkMGQwO1xuICBtYXJnaW4tYm90dG9tOiAwLjEzMzMzMzMzMzNyZW07XG59XG4udG9nZ2xlci1yYWRpb19fbGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbWFyZ2luOiAwO1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXg6IDE7XG4gICAgICAgICAgZmxleDogMTtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XG4gICAgICBmbGV4LWJhc2lzOiBhdXRvO1xufVxuLnRvZ2dsZXItcmFkaW9fX2xhYmVsLS1maWx0ZXIge1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXgtcG9zaXRpdmU6IDE7XG4gICAgICAgICAgZmxleC1ncm93OiAxO1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLnRvZ2dsZXItcmFkaW9fX2xhYmVsLS1hbHRlcm5hdGl2ZSB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDEuMzMzMzMzMzMzM3JlbTtcbiAgY29sb3I6ICNkMGQwZDA7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuLnRvZ2dsZXItcmFkaW9fX2NvdW50ZXIge1xuICBwYWRkaW5nLWxlZnQ6IDAuNTMzMzMzMzMzM3JlbTtcbn1cbi50b2dnbGVyLXJhZGlvLS1leHBhbmQge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIC13ZWJraXQtYm94LXBhY2s6IHN0YXJ0O1xuICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuLnRvZ2dsZXItcmFkaW8tLWZpbHRlciB7XG4gIHdpZHRoOiAxMDAlO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjJyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC50b2dnbGVyLXJhZGlvLS1maWx0ZXIge1xuICAgIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICB9XG59XG4udG9nZ2xlci1yYWRpby0tYWx0ZXJuYXRpdmUge1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xufVxuLnRvZ2dsZXItcmFkaW8tLWFsdGVybmF0aXZlOmhvdmVyIC50b2dnbGVyLXJhZGlvX19ib3gtLWFsdGVybmF0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAudG9nZ2xlci1yYWRpby0tcGRwIHtcbiAgICBtYXJnaW4tbGVmdDogOC44cmVtO1xuICB9XG59XG4udG9nZ2xlci1yYWRpby0tcGRwOmhvdmVyIC50b2dnbGVyLXJhZGlvX19ib3gtLWFsdGVybmF0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xufVxuLnRvZ2dsZXItcmFkaW8tLWVycm9yIC50b2dnbGVyLXJhZGlvX19ib3gge1xuICBib3JkZXItY29sb3I6ICNlMzIyMTM7XG59XG4udG9nZ2xlci1yYWRpbzpob3ZlciAudG9nZ2xlci1yYWRpb19fYm94IHtcbiAgYm9yZGVyLWNvbG9yOiAjZmVjYzAwO1xufVxuLnRvZ2dsZXItcmFkaW86aG92ZXIgLnRvZ2dsZXItcmFkaW9fX2lucHV0W2Rpc2FibGVkXSB+IC50b2dnbGVyLXJhZGlvX19ib3gsXG4udG9nZ2xlci1yYWRpbzpob3ZlciAudG9nZ2xlci1yYWRpb19faW5wdXQtLWRpc2FibGVkIH4gLnRvZ2dsZXItcmFkaW9fX2JveCB7XG4gIGJvcmRlci1jb2xvcjogI2VjZWNlYztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLnRvZ2dsZXItcmFkaW8udG9vbHRpcC1wb3NpdGlvbi1sZWZ0LWxnIC50b29sdGlwLWJ1dHRvbl9fdG9vbHRpcCB7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLnRvZ2dsZXItcmFkaW8udG9vbHRpcC1wb3NpdGlvbi1sZWZ0LWxnIC50b29sdGlwLWJ1dHRvbl9fdG9vbHRpcDo6YWZ0ZXIge1xuICAgIHJpZ2h0OiA0JTtcbiAgfVxuICAudG9nZ2xlci1yYWRpby50b29sdGlwLXBvc2l0aW9uLWxlZnQtbGcgLnRvb2x0aXAtYnV0dG9uX190b29sdGlwLWNvbnRhaW5lciB7XG4gICAgbGVmdDogYXV0bztcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgfVxufVxuLnRvZ2dsZXItcmFkaW8tLW1vYmlsZS1zbWFsbCAudG9nZ2xlci1yYWRpb19fYm94IHtcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbn1cbi50b2dnbGVyLXJhZGlvX19ib3gge1xuICAtd2Via2l0LXRyYW5zaXRpb246IGJvcmRlci1jb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICBib3JkZXItd2lkdGg6IDAuMTMzMzMzMzMzM3JlbTtcbn1cbi50b2dnbGVyLXJhZGlvX19jaGVjayB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4udG9nZ2xlci1yYWRpb19fbGFiZWwge1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbkBtZWRpYSBhbGwgYW5kICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSksICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSB7XG4gIC50b2dnbGVyLXJhZGlvX19sYWJlbCB7XG4gICAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xuICAgICAgICBmbGV4LWJhc2lzOiBhdXRvO1xuICB9XG59XG4udG9nZ2xlci1yYWRpb19faW5wdXQ6Y2hlY2tlZCB+IC50b2dnbGVyLXJhZGlvX19ib3gge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGI0YjRkO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDAuMzJyZW0gI2ZmZjtcbiAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAwLjMycmVtICNmZmY7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbiAgYm9yZGVyLXdpZHRoOiAxcHggIWltcG9ydGFudDtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xufVxuLnRvZ2dsZXItcmFkaW9fX2lucHV0OmNoZWNrZWQgfiAudG9nZ2xlci1yYWRpb19fbGFiZWwge1xuICBmb250LXdlaWdodDogNDAwO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4udG9vbHRpcC1tZXNzYWdlIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgb3BhY2l0eTogMDtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0LCBvcGFjaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0LCBvcGFjaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtaW4td2lkdGg6IDIwcmVtO1xuICBtYXJnaW4tdG9wOiAtMC41cmVtO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG4udG9vbHRpcC1tZXNzYWdlX190ZXh0IHtcbiAgZm9udC1zaXplOiAxcmVtO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMnB4IDVweCAxcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCAxcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuICBmbG9hdDogbGVmdDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBwYWRkaW5nOiAwLjI1cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGFkYWRhO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHotaW5kZXg6IDI7XG59XG4udG9vbHRpcC1tZXNzYWdlX19hcnJvdyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogY2FsYyg1MCUgLSAwLjVyZW0pO1xuICBib3R0b206IC0wLjVyZW07XG4gIGJvcmRlcjogMC41cmVtIHNvbGlkICNkYWRhZGE7XG4gIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcbiAgei1pbmRleDogMTtcbn1cbi50b29sdGlwLW1lc3NhZ2UtLXN1Y2Nlc3MgLnRvb2x0aXAtbWVzc2FnZV9fdGV4dCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYig2OS43ODYyMDY4OTY2LCAyNTMuNzEzNzkzMTAzNCwgMTQxLjgxMzc5MzEwMzQpO1xuICBib3JkZXItY29sb3I6ICMwMTkwMzk7XG4gIGNvbG9yOiAjMDE5MDM5O1xufVxuLnRvb2x0aXAtbWVzc2FnZS0tc3VjY2VzcyAudG9vbHRpcC1tZXNzYWdlX19hcnJvdyB7XG4gIGJvcmRlci1yaWdodC1jb2xvcjogIzAxOTAzOTtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAxOTAzOTtcbn1cbi50b29sdGlwLW1lc3NhZ2UtLXN1Y2Nlc3MtbGlnaHQgLnRvb2x0aXAtbWVzc2FnZV9fdGV4dCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXItY29sb3I6ICNhYmQxOGI7XG4gIGNvbG9yOiAjYWJkMThiO1xufVxuLnRvb2x0aXAtbWVzc2FnZS0tc3VjY2Vzcy1saWdodCAudG9vbHRpcC1tZXNzYWdlX19hcnJvdyB7XG4gIGJvcmRlci1yaWdodC1jb2xvcjogI2FiZDE4YjtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2FiZDE4Yjtcbn1cbi50b29sdGlwLW1lc3NhZ2UtLXdhcm5pbmcgLnRvb2x0aXAtbWVzc2FnZV9fdGV4dCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYigyNDkuODUsIDIzMi44MzI2MDg2OTU3LCAyMDguNjUpO1xuICBib3JkZXItY29sb3I6ICNlODljMzA7XG4gIGNvbG9yOiAjZTg5YzMwO1xufVxuLnRvb2x0aXAtbWVzc2FnZS0td2FybmluZyAudG9vbHRpcC1tZXNzYWdlX19hcnJvdyB7XG4gIGJvcmRlci1yaWdodC1jb2xvcjogI2U4OWMzMDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2U4OWMzMDtcbn1cbi50b29sdGlwLW1lc3NhZ2UtLWFsZXJ0IC50b29sdGlwLW1lc3NhZ2VfX3RleHQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjQ4LjM5NjM0MTQ2MzQsIDE4MS4zMTcwNzMxNzA3LCAxNzYuMTAzNjU4NTM2Nik7XG4gIGJvcmRlci1jb2xvcjogI2UzMjIxMztcbiAgY29sb3I6ICNlMzIyMTM7XG59XG4udG9vbHRpcC1tZXNzYWdlLS1hbGVydCAudG9vbHRpcC1tZXNzYWdlX19hcnJvdyB7XG4gIGJvcmRlci1yaWdodC1jb2xvcjogI2UzMjIxMztcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2UzMjIxMztcbn1cbi50b29sdGlwLW1lc3NhZ2UtLWluZm8gLnRvb2x0aXAtbWVzc2FnZV9fdGV4dCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDIzOS43NDQwOTQ0ODgyLCAxNzcuNSk7XG4gIGJvcmRlci1jb2xvcjogI2ZlY2MwMDtcbiAgY29sb3I6ICNmZWNjMDA7XG59XG4udG9vbHRpcC1tZXNzYWdlLS1pbmZvIC50b29sdGlwLW1lc3NhZ2VfX2Fycm93IHtcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjZmVjYzAwO1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmVjYzAwO1xufVxuLnRvb2x0aXAtbWVzc2FnZS0tbmV1dHJhbCAudG9vbHRpcC1tZXNzYWdlX190ZXh0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIzNS4yNSwgMjM1LjI1LCAyMzUuMjUpO1xuICBib3JkZXItY29sb3I6ICM5MjkyOTI7XG4gIGNvbG9yOiAjOTI5MjkyO1xufVxuLnRvb2x0aXAtbWVzc2FnZS0tbmV1dHJhbCAudG9vbHRpcC1tZXNzYWdlX19hcnJvdyB7XG4gIGJvcmRlci1yaWdodC1jb2xvcjogIzkyOTI5MjtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzkyOTI5Mjtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi5oZWFkZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC13ZWJraXQtYm94LWZsZXg6IDA7XG4gICAgICAtbXMtZmxleDogbm9uZTtcbiAgICAgICAgICBmbGV4OiBub25lO1xuICB6LWluZGV4OiA0MDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4yKSAwIDFweCAycHggMDtcbiAgICAgICAgICBib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMikgMCAxcHggMnB4IDA7XG59XG4uaGVhZGVyIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4uYm9keS1vdmVybGF5LS1uby1zZWFyY2ggLmhlYWRlciB7XG4gIHotaW5kZXg6IDcwMDtcbn1cbi5oZWFkZXJfX3JvdyB7XG4gIHBhZGRpbmc6IDAuNTMzMzMzMzMzM3JlbTtcbn1cbi5oZWFkZXJfX25hdmlnYXRpb24tdG9wIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiA0MDM7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5oZWFkZXJfX3NlYXJjaC1mb3JtIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cbn1cbi5ib2R5LW92ZXJsYXktLW5vLXNlYXJjaCAuaGVhZGVyX19zZWFyY2gtZm9ybSB7XG4gIHotaW5kZXg6IDcwMDtcbn1cbi5oZWFkZXJfX25hdmlnYXRpb24tbWFpbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogNDAxO1xufVxuLmhlYWRlcl9fdG9wIHtcbiAgb3BhY2l0eTogMTtcbiAgbWF4LWhlaWdodDogMi41MzMzMzMzMzMzcmVtO1xuICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAzMDBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogYWxsIDMwMG1zIGVhc2UtaW4tb3V0O1xuICBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmhlYWRlcl9fdG9wIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gIH1cbn1cbi5oZWFkZXJfX3RvcC0tcHJvZHVjdC1jb25maWd1cmF0b3IgLm5hdmlnYXRpb24tdG9wLCAuaGVhZGVyX190b3AtLWRlYWxlci1zZWFyY2gtcmVnaXN0cmF0aW9uIC5uYXZpZ2F0aW9uLXRvcCwgLmhlYWRlcl9fdG9wLS1jaGVja291dCAubmF2aWdhdGlvbi10b3Age1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG4uaGVhZGVyX190b3AtLXByb2R1Y3QtY29uZmlndXJhdG9yIC5uYXZpZ2F0aW9uLXRvcCAuZ3JpZC5jb250YWluZXIsIC5oZWFkZXJfX3RvcC0tZGVhbGVyLXNlYXJjaC1yZWdpc3RyYXRpb24gLm5hdmlnYXRpb24tdG9wIC5ncmlkLmNvbnRhaW5lciwgLmhlYWRlcl9fdG9wLS1jaGVja291dCAubmF2aWdhdGlvbi10b3AgLmdyaWQuY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiA5OTBweDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gIC5oZWFkZXJfX2xvZ28ge1xuICAgIHdpZHRoOiAyOSU7XG4gICAgbGVmdDogMXJlbTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMzAwbXMgZWFzZS1pbi1vdXQ7XG4gICAgdHJhbnNpdGlvbjogYWxsIDMwMG1zIGVhc2UtaW4tb3V0O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjVweCkge1xuICAuaGVhZGVyX19sb2dvIHtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMjAlO1xuICAgICAgICBmbGV4LWJhc2lzOiAyMCU7XG4gICAgLXdlYmtpdC1ib3gtZmxleDogMDtcbiAgICAgICAgLW1zLWZsZXgtcG9zaXRpdmU6IDA7XG4gICAgICAgICAgICBmbGV4LWdyb3c6IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTIwMXB4KSB7XG4gIC5oZWFkZXJfX2xvZ28ge1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAyNSU7XG4gICAgICAgIGZsZXgtYmFzaXM6IDI1JTtcbiAgfVxufVxuLmhlYWRlcl9fbG9nbyAuaWNvbiB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDMwMG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBhbGwgMzAwbXMgZWFzZS1pbi1vdXQ7XG59XG4uaGVhZGVyLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciwgLmhlYWRlci0tZGVhbGVyLXNlYXJjaCwgLmhlYWRlci0tY2hlY2tvdXQge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLmhlYWRlci0tcHJvZHVjdC1jb25maWd1cmF0b3IsIC5oZWFkZXItLWRlYWxlci1zZWFyY2gsIC5oZWFkZXItLWNoZWNrb3V0IHtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4yKSAwIDFweCAycHggMDtcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4yKSAwIDFweCAycHggMDtcbiAgfVxufVxuLmhlYWRlcl9fbG9nby1wcm9kdWN0LWNvbmZpZ3VyYXRvciwgLmhlYWRlcl9fbG9nby1kZWFsZXItc2VhcmNoLXJlZ2lzdHJhdGlvbiwgLmhlYWRlcl9fbG9nby1jaGVja291dCB7XG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xuICAgICAgZmxleC1iYXNpczogYXV0bztcbn1cbi5oZWFkZXJfX2xvZ28tcHJvZHVjdC1jb25maWd1cmF0b3IubG9nbywgLmhlYWRlcl9fbG9nby1kZWFsZXItc2VhcmNoLXJlZ2lzdHJhdGlvbi5sb2dvLCAuaGVhZGVyX19sb2dvLWNoZWNrb3V0LmxvZ28ge1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xufVxuLmhlYWRlcl9fbG9nby1wcm9kdWN0LWNvbmZpZ3VyYXRvci5sb2dvX19sb2dvLCAuaGVhZGVyX19sb2dvLWRlYWxlci1zZWFyY2gtcmVnaXN0cmF0aW9uLmxvZ29fX2xvZ28sIC5oZWFkZXJfX2xvZ28tY2hlY2tvdXQubG9nb19fbG9nbyB7XG4gIHdpZHRoOiA3cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuaGVhZGVyX19sb2dvLXByb2R1Y3QtY29uZmlndXJhdG9yLmxvZ29fX2xvZ28sIC5oZWFkZXJfX2xvZ28tZGVhbGVyLXNlYXJjaC1yZWdpc3RyYXRpb24ubG9nb19fbG9nbywgLmhlYWRlcl9fbG9nby1jaGVja291dC5sb2dvX19sb2dvIHtcbiAgICB3aWR0aDogOXJlbTtcbiAgfVxufVxuLmhlYWRlcl9fbG9nby1wcm9kdWN0LWNvbmZpZ3VyYXRvci5sb2dvIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbjogMXJlbSAwIDEuNXJlbTtcbn1cbi5oZWFkZXJfX21haW4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1pbi1oZWlnaHQ6IDkuMzMzMzMzMzMzM3JlbTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBtaW4taGVpZ2h0IDMwMG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBtaW4taGVpZ2h0IDMwMG1zIGVhc2UtaW4tb3V0O1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHBhZGRpbmc6IDBweCA3cHggN3B4O1xuICBwYWRkaW5nOiAwcmVtIDAuNDY2NjY2NjY2N3JlbSAwLjQ2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDM3NXB4KSB7XG4gIC5oZWFkZXJfX21haW4ge1xuICAgIHBhZGRpbmc6IDE1cHggMTVweCAxNXB4O1xuICAgIHBhZGRpbmc6IDFyZW0gMXJlbSAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5oZWFkZXJfX21haW4ge1xuICAgIG1pbi1oZWlnaHQ6IDEwLjQ2NjY2NjY2NjdyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmhlYWRlcl9fbWFpbiB7XG4gICAgbWluLWhlaWdodDogMTEuNDY2NjY2NjY2N3JlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI1cHgpIHtcbiAgLmhlYWRlcl9fbWFpbiB7XG4gICAgbWluLWhlaWdodDogNy42cmVtO1xuICAgIHBhZGRpbmc6IDE1cHggMTVweCAwcHg7XG4gICAgcGFkZGluZzogMXJlbSAxcmVtIDByZW07XG4gICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cbn1cbkBtZWRpYSBhbGwgYW5kICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSksICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSB7XG4gIC5oZWFkZXJfX21haW4ge1xuICAgIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbiAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7XG4gICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjE1cHgpIHtcbiAgLmhlYWRlcl9fbWFpbiB7XG4gICAgcGFkZGluZzogMTVweCAwcHggMHB4O1xuICAgIHBhZGRpbmc6IDFyZW0gMHJlbSAwcmVtO1xuICB9XG59XG4uaGVhZGVyX19tYWluLS1kZWFsZXItc2VhcmNoLXJlZ2lzdHJhdGlvbiwgLmhlYWRlcl9fbWFpbi0tY291bnRyeS1zZWxlY3QtcGFnZSwgLmhlYWRlcl9fbWFpbi0tcHJvZHVjdC1jb25maWd1cmF0b3ItcGFnZSwgLmhlYWRlcl9fbWFpbi0tY2hlY2tvdXQge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLWJvdHRvbTogMXJlbTtcbiAgcGFkZGluZy10b3A6IDFyZW07XG4gIG1pbi1oZWlnaHQ6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjVweCkge1xuICAuaGVhZGVyX19tYWluLS1kZWFsZXItc2VhcmNoLXJlZ2lzdHJhdGlvbiwgLmhlYWRlcl9fbWFpbi0tY291bnRyeS1zZWxlY3QtcGFnZSwgLmhlYWRlcl9fbWFpbi0tcHJvZHVjdC1jb25maWd1cmF0b3ItcGFnZSwgLmhlYWRlcl9fbWFpbi0tY2hlY2tvdXQge1xuICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIH1cbn1cbi5oZWFkZXJfX21haW4tLXByb2R1Y3QtY29uZmlndXJhdG9yLXBhZ2UsIC5oZWFkZXJfX21haW4tLWRlYWxlci1zZWFyY2gtcmVnaXN0cmF0aW9uLCAuaGVhZGVyX19tYWluLS1jb3VudHJ5LXNlbGVjdC1wYWdlIHtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuLmhlYWRlcl9fbWFpbi0tcHJvZHVjdC1jb25maWd1cmF0b3ItcGFnZSAuaGVhZGVyX19sb2dvLCAuaGVhZGVyX19tYWluLS1kZWFsZXItc2VhcmNoLXJlZ2lzdHJhdGlvbiAuaGVhZGVyX19sb2dvLCAuaGVhZGVyX19tYWluLS1jb3VudHJ5LXNlbGVjdC1wYWdlIC5oZWFkZXJfX2xvZ28ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uaGVhZGVyX19tYWluLS1wcm9kdWN0LWNvbmZpZ3VyYXRvci1wYXJ0bmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1pbi1oZWlnaHQ6IDZyZW07XG4gIG1heC1oZWlnaHQ6IDZyZW07XG4gIGhlaWdodDogNnJlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmhlYWRlcl9fbWFpbi0tcHJvZHVjdC1jb25maWd1cmF0b3ItcGFydG5lciB7XG4gICAgbWluLWhlaWdodDogN3JlbTtcbiAgICBtYXgtaGVpZ2h0OiA3cmVtO1xuICAgIGhlaWdodDogN3JlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmhlYWRlcl9fbWFpbi0tcHJvZHVjdC1jb25maWd1cmF0b3ItcGFydG5lciB7XG4gICAgbWluLWhlaWdodDogOHJlbTtcbiAgICBtYXgtaGVpZ2h0OiA4cmVtO1xuICAgIGhlaWdodDogOHJlbTtcbiAgfVxufVxuLmhlYWRlcl9fbWFpbi0tcHJvZHVjdC1jb25maWd1cmF0b3ItcGFydG5lciAuaGVhZGVyX19sb2dvLXByb2R1Y3QtY29uZmlndXJhdG9yIHtcbiAgbWFyZ2luOiAwO1xuICBoZWlnaHQ6IGF1dG87XG59XG4uaGVhZGVyX19tYWluLS1wcm9kdWN0LWNvbmZpZ3VyYXRvci1wYXJ0bmVyIC5oZWFkZXJfX2xvZ28tcHJvZHVjdC1jb25maWd1cmF0b3ItcGFydG5lciBpbWcge1xuICBtYXgtaGVpZ2h0OiAzcmVtO1xuICBwYWRkaW5nOiAwLjVyZW0gMCAwLjVyZW0gMDtcbiAgbWFyZ2luOiAwIDAgMCAxLjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5oZWFkZXJfX21haW4tLXByb2R1Y3QtY29uZmlndXJhdG9yLXBhcnRuZXIgLmhlYWRlcl9fbG9nby1wcm9kdWN0LWNvbmZpZ3VyYXRvci1wYXJ0bmVyIGltZyB7XG4gICAgbWF4LWhlaWdodDogNHJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuaGVhZGVyX19tYWluLS1wcm9kdWN0LWNvbmZpZ3VyYXRvci1wYXJ0bmVyIC5oZWFkZXJfX2xvZ28tcHJvZHVjdC1jb25maWd1cmF0b3ItcGFydG5lciBpbWcge1xuICAgIG1heC1oZWlnaHQ6IDVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5oZWFkZXJfX21haW4tLXByb2R1Y3QtY29uZmlndXJhdG9yLXBhcnRuZXIgLmhlYWRlcl9fbG9nby1wcm9kdWN0LWNvbmZpZ3VyYXRvci1wYXJ0bmVyIGltZyB7XG4gICAgbWF4LWhlaWdodDogNnJlbTtcbiAgfVxufVxuLmhlYWRlcl9fbWFpbi0tcHJvZHVjdC1jb25maWd1cmF0b3ItcGFydG5lciAuaGVhZGVyX19sb2dvLXByb2R1Y3QtY29uZmlndXJhdG9yOm5vdCguaGVhZGVyX19sb2dvLXByb2R1Y3QtY29uZmlndXJhdG9yLXBhcnRuZXIpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmhlYWRlcl9fbWFpbi0tcHJvZHVjdC1jb25maWd1cmF0b3ItcGFydG5lciAuaGVhZGVyX19sb2dvLXByb2R1Y3QtY29uZmlndXJhdG9yOm5vdCguaGVhZGVyX19sb2dvLXByb2R1Y3QtY29uZmlndXJhdG9yLXBhcnRuZXIpOjphZnRlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgY29udGVudDogXCJcIjtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAwLjVyZW0pO1xuICB3aWR0aDogMXB4O1xuICByaWdodDogMDtcbiAgdG9wOiAwLjI1cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDBkMGQwO1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5oZWFkZXJfX21haW4tLXByb2R1Y3QtY29uZmlndXJhdG9yLXBhcnRuZXIgLmhlYWRlcl9fbG9nby1wcm9kdWN0LWNvbmZpZ3VyYXRvcjpub3QoLmhlYWRlcl9fbG9nby1wcm9kdWN0LWNvbmZpZ3VyYXRvci1wYXJ0bmVyKTo6YWZ0ZXIgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLmhlYWRlcl9fbWFpbi0tcHJvZHVjdC1jb25maWd1cmF0b3ItcGFydG5lciAuaGVhZGVyX19sb2dvLXByb2R1Y3QtY29uZmlndXJhdG9yOm5vdCguaGVhZGVyX19sb2dvLXByb2R1Y3QtY29uZmlndXJhdG9yLXBhcnRuZXIpOjphZnRlciB7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxcmVtKTtcbiAgICB0b3A6IDAuNXJlbTtcbiAgfVxufVxuLmhlYWRlcl9fbWFpbi0tcHJvZHVjdC1jb25maWd1cmF0b3ItcGFydG5lciAuaWNvbi0tbG9nbyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLWhlaWdodDogM3JlbTtcbiAgbWF4LWhlaWdodDogM3JlbTtcbiAgaGVpZ2h0OiAzcmVtO1xuICBwYWRkaW5nOiAwLjVyZW0gMCAwLjVyZW0gMDtcbiAgbWFyZ2luOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTFweCkgYW5kIChtYXgtd2lkdGg6IDEwMjNweCkge1xuICAuaGVhZGVyX19tYWluLS1wcm9kdWN0LWNvbmZpZ3VyYXRvci1wYXJ0bmVyIC5pY29uLS1sb2dvIHtcbiAgICBtYXJnaW46IDAgMS41cmVtIDAgMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAuaGVhZGVyX19tYWluLS1wcm9kdWN0LWNvbmZpZ3VyYXRvci1wYXJ0bmVyIC5pY29uLS1sb2dvIHtcbiAgICBtaW4taGVpZ2h0OiA0cmVtO1xuICAgIG1heC1oZWlnaHQ6IDRyZW07XG4gICAgaGVpZ2h0OiA0cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5oZWFkZXJfX21haW4tLXByb2R1Y3QtY29uZmlndXJhdG9yLXBhcnRuZXIgLmljb24tLWxvZ28ge1xuICAgIG1pbi1oZWlnaHQ6IDVyZW07XG4gICAgbWF4LWhlaWdodDogNXJlbTtcbiAgICBoZWlnaHQ6IDVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5oZWFkZXJfX21haW4tLXByb2R1Y3QtY29uZmlndXJhdG9yLXBhcnRuZXIgLmljb24tLWxvZ28ge1xuICAgIG1pbi1oZWlnaHQ6IDZyZW07XG4gICAgbWF4LWhlaWdodDogNnJlbTtcbiAgICBoZWlnaHQ6IDZyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gIC5oZWFkZXJfX21haW4tLXJlZHVjZWQgLmhlYWRlcl9fbG9nbyB7XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDEwMCU7XG4gICAgICAgIGZsZXgtYmFzaXM6IDEwMCU7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICByaWdodDogMXJlbTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBsZWZ0OiAxcmVtO1xuICB9XG4gIC5oZWFkZXJfX21haW4tLXJlZHVjZWQgLmhlYWRlcl9fbG9nbyAuaWNvbi0tbG9nbyB7XG4gICAgbWF4LXdpZHRoOiAyOSU7XG4gICAgd2lkdGg6IDZyZW07XG4gIH1cbn1cbkBtZWRpYSBhbGwgYW5kICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSksICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSBhbmQgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gIC5oZWFkZXJfX21haW4tLXJlZHVjZWQge1xuICAgIG1pbi1oZWlnaHQ6IDlyZW07XG4gIH1cbn1cbi5oZWFkZXJfX21haW4tLXJlZHVjZWQgLnN1Z2dlc3Qtc2VhcmNoX19jb250YWluZXIge1xuICBsZWZ0OiBhdXRvO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuaGVhZGVyX19tYWluLS1yZWR1Y2VkIC5zdWdnZXN0LXNlYXJjaF9fY29udGFpbmVyIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI1cHgpIHtcbiAgLmhlYWRlcl9fbWFpbi0tcmVkdWNlZCAuc3VnZ2VzdC1zZWFyY2hfX2NvbnRhaW5lciB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTY0LjUlKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNjQuNSUpO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAuaGVhZGVyX19tYWluLS1yZWR1Y2VkIC5zdWdnZXN0LXNlYXJjaF9fY29udGFpbmVyIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNjUlKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNjUlKTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLmhlYWRlciAudXNlci1uYXZpZ2F0aW9uIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAxcmVtO1xuICB9XG59XG4uaGVhZGVyIC51c2VyLW5hdmlnYXRpb25fX2l0ZW0tLXNlYXJjaCB7XG4gIG9wYWNpdHk6IDA7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDMwMG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBhbGwgMzAwbXMgZWFzZS1pbi1vdXQ7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLmhlYWRlcl9fc2VhcmNoIHtcbiAgb3BhY2l0eTogMTtcbiAgd2lkdGg6IDcwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gIC5oZWFkZXJfX3NlYXJjaCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAxcmVtO1xuICAgIGJvdHRvbTogMXJlbTtcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAzMDBtcyBlYXNlLWluLW91dDtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMzAwbXMgZWFzZS1pbi1vdXQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLmhlYWRlcl9fc2VhcmNoIHtcbiAgICB3aWR0aDogODAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5oZWFkZXJfX3NlYXJjaCB7XG4gICAgd2lkdGg6IDkwJTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI1cHgpIHtcbiAgLmhlYWRlcl9fc2VhcmNoIHtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMzUlO1xuICAgICAgICBmbGV4LWJhc2lzOiAzNSU7XG4gICAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIC13ZWJraXQtYm94LW9yZGluYWwtZ3JvdXA6IDM7XG4gICAgICAgIC1tcy1mbGV4LW9yZGVyOiAyO1xuICAgICAgICAgICAgb3JkZXI6IDI7XG4gIH1cbn1cbi5oZWFkZXJfX3NlYXJjaCAuaW5wdXQtYnV0dG9uIHtcbiAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgZmxleC13cmFwOiBub3dyYXA7XG59XG4uaGVhZGVyX19sb2dpbiB7XG4gIG1hcmdpbi1yaWdodDogLTAuMzMzMzMzMzMzM3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNXB4KSB7XG4gIC5oZWFkZXJfX2xvZ2luIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgbWFyZ2luLWxlZnQ6IDEuODc1cmVtO1xuICB9XG59XG4uaGVhZGVyX19uYXZpZ2F0aW9uIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNXB4KSB7XG4gIC5oZWFkZXJfX25hdmlnYXRpb24ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGJhY2tncm91bmQ6ICNmZmY7XG4gIH1cbiAgLmhlYWRlcl9fbmF2aWdhdGlvbiAuY29udGFpbmVyIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAuaGVhZGVyX19hY3Rpb25zIHtcbiAgICBsZWZ0OiAxcmVtO1xuICAgIGJvdHRvbTogMXJlbTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMzAwbXMgZWFzZS1pbi1vdXQ7XG4gICAgdHJhbnNpdGlvbjogYWxsIDMwMG1zIGVhc2UtaW4tb3V0O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjVweCkge1xuICAuaGVhZGVyX19hY3Rpb25zIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4uaGVhZGVyX19hY3Rpb25zIC5pY29uLWJ1dHRvbiB7XG4gIG1hcmdpbi10b3A6IC0wLjc1cmVtO1xufVxuLmhlYWRlcl9fYWN0aW9ucyAuaWNvbi1idXR0b25fX2ljb24gc3ZnIHtcbiAgd2lkdGg6IDEuMzMzMzMzMzMzM3JlbTtcbiAgaGVpZ2h0OiAxLjMzMzMzMzMzMzNyZW07XG59XG4uaGVhZGVyX19hY3Rpb25zIC5pY29uLWJ1dHRvbi0taGFzLWxhYmVsIHtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGVuZDtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBlbmQ7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICB0b3A6IDA7XG4gIGhlaWdodDogMy4zMzMzMzMzMzMzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI1cHgpIHtcbiAgLmhlYWRlcl9fYWN0aW9ucyAuaWNvbi1idXR0b24tLWhhcy1sYWJlbCB7XG4gICAgaGVpZ2h0OiBpbmhlcml0O1xuICB9XG59XG4uaGVhZGVyX19hY3Rpb25zIC5pY29uLWJ1dHRvbi0taGFzLWxhYmVsIC5sYWJlbCB7XG4gIGJvdHRvbTogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNXB4KSB7XG4gIC5oZWFkZXJfX2FjdGlvbnMgLmljb24tYnV0dG9uLS1oYXMtbGFiZWwgLmxhYmVsIHtcbiAgICBib3R0b206IC0xLjVyZW07XG4gIH1cbn1cbi5oZWFkZXJfX2FjdGlvbnMtaXRlbSB7XG4gIGNvbG9yOiAjMDAwO1xufVxuLmhlYWRlcl9fdXNlciB7XG4gIHBhZGRpbmctbGVmdDogMS4zMzMzMzMzMzMzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI1cHgpIHtcbiAgLmhlYWRlcl9fdXNlciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLmhlYWRlcl9fdXNlci1uYXYge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LXBhY2s6IGVuZDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogNzElO1xuICAgICAgZmxleC1iYXNpczogNzElO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI1cHgpIHtcbiAgLmhlYWRlcl9fdXNlci1uYXYge1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiA0NSU7XG4gICAgICAgIGZsZXgtYmFzaXM6IDQ1JTtcbiAgICAtd2Via2l0LWJveC1vcmRpbmFsLWdyb3VwOiA0O1xuICAgICAgICAtbXMtZmxleC1vcmRlcjogMztcbiAgICAgICAgICAgIG9yZGVyOiAzO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyMDFweCkge1xuICAuaGVhZGVyX191c2VyLW5hdiB7XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDQwJTtcbiAgICAgICAgZmxleC1iYXNpczogNDAlO1xuICB9XG59XG5AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpLCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSkgYW5kIChtaW4td2lkdGg6IDEyMDFweCkge1xuICAuaGVhZGVyX191c2VyLW5hdiB7XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDM4JTtcbiAgICAgICAgZmxleC1iYXNpczogMzglO1xuICB9XG59XG4uaGVhZGVyX19iYWNrIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjb2xvcjogI2IyYjJiMjtcbiAgZm9udC1zaXplOiAwLjhyZW07XG4gIGxpbmUtaGVpZ2h0OiAwLjg2NjY2NjY2NjdyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNXB4KSB7XG4gIC5oZWFkZXJfX2JhY2sge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IGJvcmRlci1jb2xvciAyNTBtcyBlYXNlLWluLW91dCwgY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0LCBjb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgICBwYWRkaW5nOiAwLjY2NjY2NjY2NjdyZW0gMnJlbTtcbiAgICBib3JkZXI6IDAuMDY2NjY2NjY2N3JlbSBzb2xpZCAjZDBkMGQwO1xuICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMnJlbTtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB9XG4gIC5oZWFkZXJfX2JhY2s6aG92ZXIsIC5oZWFkZXJfX2JhY2s6Zm9jdXMge1xuICAgIGJvcmRlci1jb2xvcjogI2ZlY2MwMDtcbiAgICBjb2xvcjogI2ZlY2MwMDtcbiAgfVxufVxuLmhlYWRlcl9fY2hlY2tvdXQtc2VjdXJlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjYjJiMmIyO1xuICBmb250LXNpemU6IDAuNjY2NjY2NjY2N3JlbTtcbiAgbGluZS1oZWlnaHQ6IDAuOHJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmhlYWRlcl9fY2hlY2tvdXQtc2VjdXJlIHtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gICAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgICBsaW5lLWhlaWdodDogMXJlbTtcbiAgfVxufVxuLmhlYWRlcl9fY2hlY2tvdXQtc2VjdXJlLXRleHQge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5oZWFkZXJfX2NoZWNrb3V0LXNlY3VyZS10ZXh0IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuNnJlbTtcbiAgfVxufVxuLmhlYWRlci0taXMtY29sbGFwc2VkIHtcbiAgei1pbmRleDogNzAwO1xufVxuLmhlYWRlci0taXMtY29sbGFwc2VkIC5sb2dvIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAwKSBhbmQgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gIC5oZWFkZXItLWlzLWNvbGxhcHNlZCAubG9nbyB7XG4gICAgbGVmdDogMy4zMzMzMzMzMzMzcmVtO1xuICB9XG4gIC5oZWFkZXItLWlzLWNvbGxhcHNlZCAubG9nb19fbG9nbyB7XG4gICAgd2lkdGg6IDhyZW07XG4gICAgaGVpZ2h0OiA0LjY2NjY2NjY2NjdyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gIC5oZWFkZXItLWlzLWNvbGxhcHNlZCAuaGVhZGVyX19zZWFyY2gge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gIC5oZWFkZXItLWlzLWNvbGxhcHNlZCAuaGVhZGVyX19hY3Rpb25zIHtcbiAgICBib3R0b206IDAuNXJlbTtcbiAgfVxufVxuQG1lZGlhIGFsbCBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKSwgKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpIGFuZCAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLmhlYWRlci0taXMtY29sbGFwc2VkIC5oZWFkZXJfX2FjdGlvbnMge1xuICAgIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbiAgICBib3R0b206IDFyZW0gIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIGFsbCBhbmQgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gIEBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjogYXV0bykge1xuICAgIC5oZWFkZXItLWlzLWNvbGxhcHNlZCAuaGVhZGVyX19hY3Rpb25zIHtcbiAgICAgIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbiAgICAgIGJvdHRvbTogMXJlbSAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxufVxuLmhlYWRlci0taXMtY29sbGFwc2VkIC5oZWFkZXJfX21haW4ge1xuICBwYWRkaW5nLWJvdHRvbTogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gIC5oZWFkZXItLWlzLWNvbGxhcHNlZCAuaGVhZGVyX19tYWluIHtcbiAgICBtaW4taGVpZ2h0OiA0LjY2NjY2NjY2NjdyZW07XG4gIH1cbn1cbi5oZWFkZXItLWlzLWNvbGxhcHNlZCAuaGVhZGVyX19tYWluLS1wcm9kdWN0LWNvbmZpZ3VyYXRvci1wYXJ0bmVyIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyM3B4KSB7XG4gIC5oZWFkZXItLWlzLWNvbGxhcHNlZCAuaGVhZGVyX19tYWluLS1yZWR1Y2VkIC5oZWFkZXJfX2xvZ28ge1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAxMDAlO1xuICAgICAgICBmbGV4LWJhc2lzOiAxMDAlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICByaWdodDogMXJlbTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cbn1cbi5oZWFkZXItLWlzLWNvbGxhcHNlZCAuaGVhZGVyX191c2VyLW5hdiB7XG4gIHBhZGRpbmctdG9wOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLmhlYWRlci0taXMtY29sbGFwc2VkIC5oZWFkZXJfX3VzZXItbmF2IC5pY29uLWJ1dHRvbl9fdGV4dCB7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkgYW5kIChtYXgtd2lkdGg6IDEwMjVweCkge1xuICAuaGVhZGVyLS1pcy1jb2xsYXBzZWQgLmhlYWRlcl9fdXNlci1uYXYgLmljb24tYnV0dG9uIHtcbiAgICBoZWlnaHQ6IDUuMzMzMzMzMzMzM3JlbTtcbiAgfVxuICAuaGVhZGVyLS1pcy1jb2xsYXBzZWQgLmhlYWRlcl9fdXNlci1uYXYgLmNhcnQtaXRlbXMtY291bnRlcl9fcXVhbnRpdHkge1xuICAgIHRvcDogMC4yNXJlbTtcbiAgICByaWdodDogMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLmhlYWRlci0taXMtY29sbGFwc2VkIC5oZWFkZXJfX3RvcCB7XG4gICAgbWF4LWhlaWdodDogMDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMi41MzMzMzMzMzMzcmVtLCAwKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTIuNTMzMzMzMzMzM3JlbSwgMCk7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNXB4KSB7XG4gIC5oZWFkZXItLWlzLWNvbGxhcHNlZCAuaGVhZGVyX190b3Age1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG4uaGVhZGVyLS1pcy1jb2xsYXBzZWQuaGVhZGVyLS1kZXNrdG9wIC5oZWFkZXJfX3RvcCB7XG4gIG1heC1oZWlnaHQ6IDA7XG4gIG9wYWNpdHk6IDA7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMi41MzMzMzMzMzMzcmVtLCAwKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0yLjUzMzMzMzMzMzNyZW0sIDApO1xufVxuLmhlYWRlci0taXMtY29sbGFwc2VkLmhlYWRlci0tZGVza3RvcCAuaGVhZGVyX191c2VyLW5hdiAuaWNvbi1idXR0b25fX3RleHQge1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbi5oZWFkZXItLWlzLWNvbGxhcHNlZCAudXNlci1uYXZpZ2F0aW9uX19pdGVtLS1zZWFyY2gge1xuICBvcGFjaXR5OiAxO1xuICBwb2ludGVyLWV2ZW50czogYWxsO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI1cHgpIHtcbiAgLmhlYWRlci0taXMtY29sbGFwc2VkIHtcbiAgICB6LWluZGV4OiA0MDA7XG4gIH1cbiAgLmhlYWRlci0taXMtY29sbGFwc2VkLmhlYWRlci0tZGVza3RvcCB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICB9XG4gIC5oZWFkZXItLWlzLWNvbGxhcHNlZC5oZWFkZXItLWRlc2t0b3AgLmhlYWRlcl9fbG9nbyAuaWNvbiB7XG4gICAgd2lkdGg6IDcwJTtcbiAgICBoZWlnaHQ6IDRyZW07XG4gIH1cbiAgLmhlYWRlci0taXMtY29sbGFwc2VkLmhlYWRlci0tZGVza3RvcCAuaGVhZGVyX19tYWluIHtcbiAgICBtaW4taGVpZ2h0OiBhdXRvO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgcGFkZGluZy10b3A6IDFyZW07XG4gIH1cbiAgLmhlYWRlci0taXMtY29sbGFwc2VkLmhlYWRlci0tZGVza3RvcCAuaGVhZGVyX191c2VyLW5hdiB7XG4gICAgbWFyZ2luLXRvcDogYXV0bztcbiAgfVxuICAuaGVhZGVyLS1pcy1jb2xsYXBzZWQuaGVhZGVyLS1kZXNrdG9wIC51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gIH1cbn1cbi5oZWFkZXItLWlzLWZpeGVkIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB3aWR0aDogMTAwJTtcbiAgei1pbmRleDogMzk5O1xufVxuLmhlYWRlci0tcHJvZHVjdC1jb25maWd1cmF0b3IuaGVhZGVyLS1pcy1jb2xsYXBzZWQge1xuICB6LWluZGV4OiAxNDAwO1xufVxuLmhlYWRlci0tcHJvZHVjdC1jb25maWd1cmF0b3IuaGVhZGVyLS1pcy1jb2xsYXBzZWQgLmhlYWRlcl9fdG9wIHtcbiAgbWF4LWhlaWdodDogMDtcbiAgb3BhY2l0eTogMDtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0yLjUzMzMzMzMzMzNyZW0sIDApO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTIuNTMzMzMzMzMzM3JlbSwgMCk7XG59XG4uaGVhZGVyLS1wcm9kdWN0LWNvbmZpZ3VyYXRvci5oZWFkZXItLWlzLWNvbGxhcHNlZCAubG9nbyB7XG4gIGxlZnQ6IDA7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5uYXZpZ2F0aW9uLXRvcCB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGxpbmUtaGVpZ2h0OiAyO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2aWdhdGlvbi10b3Age1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBub3dyYXA7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBub3dyYXA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gIC5uYXZpZ2F0aW9uLXRvcCB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuLm5hdmlnYXRpb24tdG9wX19sb2dvIC5pY29uIHtcbiAgaGVpZ2h0OiAyLjUzMzMzMzMzMzNyZW07XG4gIHdpZHRoOiAxMy4zMzMzMzMzMzMzcmVtO1xuICBwYWRkaW5nOiAwLjI1cmVtO1xufVxuLm5hdmlnYXRpb24tdG9wX19saXN0IHtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xuICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5uYXZpZ2F0aW9uLXRvcF9fbGlzdCB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgfVxufVxuLm5hdmlnYXRpb24tdG9wX19saXN0LWNoZWNrb3V0IHtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDEwMCU7XG4gICAgICBmbGV4LWJhc2lzOiAxMDAlO1xufVxuLm5hdmlnYXRpb24tdG9wX19pdGVtIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbi5uYXZpZ2F0aW9uLXRvcF9fY2Fyb3VzZWwge1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWF4LXdpZHRoOiBpbml0aWFsO1xufVxuLm5hdmlnYXRpb24tdG9wX19jYXJvdXNlbCAuc2xpY2stc2xpZGUge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5uYXZpZ2F0aW9uLXRvcF9fY2Fyb3VzZWwgLnNsaWNrLXNsaWRlIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgfVxuICAubmF2aWdhdGlvbi10b3BfX2Nhcm91c2VsIC5zbGljay1zbGlkZSA+IGRpdiB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAubmF2aWdhdGlvbi10b3BfX2ludGVybmF0aW9uYWxpemF0aW9uIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDMwJTtcbiAgICAgICAgZmxleC1iYXNpczogMzAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAubmF2aWdhdGlvbi10b3BfX2ludGVybmF0aW9uYWxpemF0aW9uIHtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMjAlO1xuICAgICAgICBmbGV4LWJhc2lzOiAyMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5uYXZpZ2F0aW9uLXRvcCAuaWNvbiB7XG4gICAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICB9XG59XG4ubmF2aWdhdGlvbi10b3AgLmljb24gc3ZnIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XG4gIG1pbi13aWR0aDogdW5zZXQ7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5ub3RpZmljYXRpb24tYXJlYSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgei1pbmRleDogNjAwO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uc2VjdGlvbiB7XG4gIHBhZGRpbmc6IDEuNDY2NjY2NjY2N3JlbSAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc2VjdGlvbiB7XG4gICAgcGFkZGluZzogMy4ycmVtIDA7XG4gIH1cbn1cbi5zZWN0aW9uLS1uby1wYWRkaW5nLXRvcCB7XG4gIHBhZGRpbmctdG9wOiAwO1xufVxuLnNlY3Rpb24tLW5vLXBhZGRpbmctYm90dG9tIHtcbiAgcGFkZGluZy1ib3R0b206IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuc2VjdGlvbi0tbG9naW4tcGFnZSB7XG4gICAgYm9yZGVyLWxlZnQtd2lkdGg6IDFweDtcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnNlY3Rpb24tLWxvZ2luLXBhZ2UgLnNlY3Rpb25fX3RpdGxlIHtcbiAgICBwYWRkaW5nOiAwIDEuNXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnNlY3Rpb24tLWRlYWxlci1jb250YWluZXIsIC5zZWN0aW9uLS1jb250YWN0LWNvbnRhaW5lciB7XG4gICAgcGFkZGluZzogMCAxLjVyZW07XG4gIH1cbn1cbi5zZWN0aW9uLS1jb250YWN0LWNvbnRhaW5lciB7XG4gIGJvcmRlci10b3Atd2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xuICBwYWRkaW5nLXRvcDogMS41cmVtO1xuICBtYXJnaW4tdG9wOiAxLjVyZW07XG59XG4uc2VjdGlvbi0tY2VudGVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICB3aWR0aDogMTAwJTtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gICAgICAgICAgZmxleC1mbG93OiByb3cgbm93cmFwO1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG4uc2VjdGlvbi0tY2VudGVyX19pbm5lciB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDA7XG4gICAgICAtbXMtZmxleDogbm9uZTtcbiAgICAgICAgICBmbGV4OiBub25lO1xufVxuLnNlY3Rpb24tLWxhc3Qge1xuICBwYWRkaW5nLWJvdHRvbTogNC42NjY2NjY2NjY3cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc2VjdGlvbi0tbGFzdCB7XG4gICAgcGFkZGluZy1ib3R0b206IDYuNHJlbTtcbiAgfVxufVxuLnNlY3Rpb24tLXNlY29uZGFyeSB7XG4gIHBhZGRpbmc6IDIuMTMzMzMzMzMzM3JlbSAwIDEuMDY2NjY2NjY2N3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnNlY3Rpb24tLXNlY29uZGFyeSB7XG4gICAgcGFkZGluZy10b3A6IDMuMzMzMzMzMzMzM3JlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnNlY3Rpb24tLXNlY29uZGFyeSB7XG4gICAgcGFkZGluZy10b3A6IDQuNjY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLnNlY3Rpb24tLWJnLWRhcmsge1xuICBwYWRkaW5nOiAxLjQ2NjY2NjY2NjdyZW0gMCAxLjI2NjY2NjY2NjdyZW07XG4gIGJhY2tncm91bmQtY29sb3I6ICMxYTE3MWI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zZWN0aW9uLS1iZy1kYXJrIHtcbiAgICBwYWRkaW5nOiAzLjMzMzMzMzMzMzNyZW0gMCA1LjMzMzMzMzMzMzNyZW07XG4gIH1cbiAgLnNlY3Rpb24tLWJnLWRhcmsgLnByb2R1Y3QtY2FyZF9fY29udGFpbmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICB9XG59XG4uc2VjdGlvbi0tYmctZGFyayAucHJvZHVjdC1jYXJkIHtcbiAgcGFkZGluZy1ib3R0b206IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zZWN0aW9uLS1iZy1kYXJrIC5wcm9kdWN0LWNhcmQge1xuICAgIHBhZGRpbmctYm90dG9tOiAycmVtO1xuICB9XG59XG4uc2VjdGlvbi0tYmctZGFyayAucHJvZHVjdC1jYXJkX19pbWFnZS13cmFwIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbi5zZWN0aW9uLS1iZy1kYXJrIC5wcm9kdWN0LWNhcmRfX2ltYWdlLXdyYXA6OmJlZm9yZSB7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xufVxuLnNlY3Rpb24tLWJnLWRhcmsgLnByb2R1Y3QtY2FyZF9fb3ZlcmxheTo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbn1cbi5zZWN0aW9uLS1mdWxsLXdpZHRoIHtcbiAgbWFyZ2luLWxlZnQ6IC0xNXB4O1xuICBtYXJnaW4tcmlnaHQ6IC0xNXB4O1xufVxuLnNlY3Rpb24tLW5vLW1vYmlsZS1ib3R0b20taW5kZW50IHtcbiAgcGFkZGluZy1ib3R0b206IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zZWN0aW9uLS1uby1tb2JpbGUtYm90dG9tLWluZGVudCB7XG4gICAgcGFkZGluZy1ib3R0b206IDEuMDY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLnNlY3Rpb25fX3RpdGxlIHtcbiAgbWFyZ2luLWJvdHRvbTogMS4wNjY2NjY2NjY3cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnNlY3Rpb25fX3RpdGxlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjZyZW07XG4gIH1cbn1cbi5zZWN0aW9uX190aXRsZS0tc2Vjb25kYXJ5IHtcbiAgY29sb3I6ICM5MjkyOTI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5zZWN0aW9uX190aXRsZS0tbW9iaWxlLWNlbnRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnNlY3Rpb25fX3RpdGxlLS1tb2JpbGUtY2VudGVyIHtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB9XG59XG4uc2VjdGlvbl9fc3ViLXRpdGxlLCAuc2VjdGlvbl9fdGV4dCB7XG4gIGNvbG9yOiAjZDBkMGQwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIG1hcmdpbi1ib3R0b206IDEuNzMzMzMzMzMzM3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnNlY3Rpb25fX3N1Yi10aXRsZSwgLnNlY3Rpb25fX3RleHQge1xuICAgIG1hcmdpbi1ib3R0b206IDIuNjY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLnNlY3Rpb25fX3N1Yi10aXRsZSB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnNlY3Rpb25fX3N1Yi10aXRsZSB7XG4gICAgZm9udC1zaXplOiAyLjRyZW07XG4gIH1cbn1cbi5zZWN0aW9uX190ZXh0IHtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS42MTtcbiAgbWF4LXdpZHRoOiA2NC42NjY2NjY2NjY3cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc2VjdGlvbl9fdGV4dCB7XG4gICAgZm9udC1zaXplOiAyLjRyZW07XG4gIH1cbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnNpZGUtZHJhd2VyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiA3MDE7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjVweCkge1xuICAuc2lkZS1kcmF3ZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi5zaWRlLWRyYXdlcl9fb3ZlcmxheSB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIG9wYWNpdHk6IDA7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAyNTBtcyBlYXNlLWluLW91dCwgb3BhY2l0eSAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAyNTBtcyBlYXNlLWluLW91dCwgb3BhY2l0eSAyNTBtcyBlYXNlLWluLW91dDtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTExLCAxMTEsIDExMSwgMC40KTtcbn1cbi5zaWRlLWRyYXdlcl9fZHJhd2VyIHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDJweCA1cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDJweCA1cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgb3BhY2l0eTogMDtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBsZWZ0IDI1MG1zIGVhc2UtaW4tb3V0LCB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0LCBvcGFjaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBsZWZ0IDI1MG1zIGVhc2UtaW4tb3V0LCB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0LCBvcGFjaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IC0yNXJlbTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnNpZGUtZHJhd2VyX19kcmF3ZXIge1xuICAgIHdpZHRoOiAyNXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc2lkZS1kcmF3ZXJfX2RyYXdlci0tbG9nZ2VkIHtcbiAgICBwYWRkaW5nLXRvcDogMy4zMzMzMzMzMzMzcmVtO1xuICB9XG59XG4uc2lkZS1kcmF3ZXJfX2hvbGRlciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXgtcG9zaXRpdmU6IDE7XG4gICAgICAgICAgZmxleC1ncm93OiAxO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG4uc2lkZS1kcmF3ZXJfX25hdmlnYXRpb24tdG9wIHtcbiAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xuICBsaW5lLWhlaWdodDogMnJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnNpZGUtZHJhd2VyX19uYXZpZ2F0aW9uLXRvcC1hY3Rpb25zIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4uc2lkZS1kcmF3ZXJfX2Nsb3NlLXJvdyB7XG4gIGJvcmRlci10b3Atd2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xuICBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbiAgbGluZS1oZWlnaHQ6IDNyZW07XG59XG4uc2lkZS1kcmF3ZXJfX2Nsb3NlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazogZW5kO1xuICAgICAgLW1zLWZsZXgtcGFjazogZW5kO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMS4zMzMzMzMzMzMzcmVtO1xuICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5zaWRlLWRyYXdlcl9fY2xvc2Ugc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi5zaWRlLWRyYXdlcl9fY2xvc2Ugc3ZnIHtcbiAgd2lkdGg6IDEuMzMzMzMzMzMzM3JlbTtcbiAgaGVpZ2h0OiAxLjMzMzMzMzMzMzNyZW07XG4gIG1hcmdpbi1sZWZ0OiAwLjVyZW07XG59XG4uc2lkZS1kcmF3ZXJfX2Nsb3NlLWxhYmVsIHtcbiAgZm9udC1zaXplOiAxcmVtO1xufVxuLnNpZGUtZHJhd2VyX191c2VyLWxpbmsge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LWFsaWduOiBlbmQ7XG4gICAgICAtbXMtZmxleC1hbGlnbjogZW5kO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgcGFkZGluZzogMC44cmVtIDA7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjA2NjY2NjY2NjdyZW07XG4gIGZvbnQtc2l6ZTogMC42NjY2NjY2NjY3cmVtO1xuICBsZXR0ZXItc3BhY2luZzogMC4wNHJlbTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cbi5zaWRlLWRyYXdlcl9fdXNlci1saW5rLWljb24ge1xuICBtYXJnaW4tcmlnaHQ6IDAuNjY2NjY2NjY2N3JlbTtcbn1cbi5zaWRlLWRyYXdlcl9fbmF2aWdhdGlvbiB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleDogMTtcbiAgICAgICAgICBmbGV4OiAxO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uc2lkZS1kcmF3ZXJfX2luZm8ge1xuICAtbXMtZmxleC1uZWdhdGl2ZTogMDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICBwYWRkaW5nLWJvdHRvbTogMS42NjY2NjY2NjY3cmVtO1xufVxuLnNpZGUtZHJhd2VyX19jb250YWN0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDEuMDY2NjY2NjY2N3JlbSAxcmVtIDEuMDY2NjY2NjY2N3JlbSA0LjI2NjY2NjY2NjdyZW07XG4gIGJvcmRlci1yYWRpdXM6IDAuMTMzMzMzMzMzM3JlbTtcbiAgYm9yZGVyOiAwLjA2NjY2NjY2NjdyZW0gc29saWQgI2VjZWNlYztcbiAgY29sb3I6ICNkMGQwZDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5zaWRlLWRyYXdlcl9fY29udGFjdC1pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAxLjMzMzMzMzMzMzNyZW07XG4gIHRvcDogNTAlO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG4uc2lkZS1kcmF3ZXJfX2NvbnRhY3QtdGV4dCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMjtcbn1cbi5zaWRlLWRyYXdlcl9fY29udGFjdC10ZXh0LS13ZWlnaHQge1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLnNpZGUtZHJhd2VyLS1zaG93IC5zaWRlLWRyYXdlcl9fb3ZlcmxheSB7XG4gIHBvaW50ZXItZXZlbnRzOiBhbGw7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIG9wYWNpdHk6IDE7XG59XG4uc2lkZS1kcmF3ZXItLXNob3cgLnNpZGUtZHJhd2VyX19kcmF3ZXIge1xuICBwb2ludGVyLWV2ZW50czogYWxsO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBvcGFjaXR5OiAxO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5wcm9kdWN0LWJ1bmRsZSB7XG4gIG1hcmdpbjogMCBhdXRvIDZyZW07XG59XG4ucHJvZHVjdC1idW5kbGUtLWNvbmZpZ3VyYXRvciB7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nLWJvdHRvbTogMC43MzMzMzMzMzMzcmVtO1xufVxuLnByb2R1Y3QtYnVuZGxlLS1jYXJ0IHtcbiAgbWF4LXdpZHRoOiBub25lO1xuICBtYXJnaW46IDA7XG59XG4ucHJvZHVjdC1idW5kbGVfX3RpdGxlIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDEuNnJlbTtcbiAgY29sb3I6ICM2ZjZmNmY7XG4gIG1hcmdpbi1ib3R0b206IDAuOTMzMzMzMzMzM3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtYnVuZGxlX190aXRsZSB7XG4gICAgZm9udC1zaXplOiAyLjEzMzMzMzMzMzNyZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMS40NjY2NjY2NjY3cmVtO1xuICB9XG59XG4ucHJvZHVjdC1idW5kbGVfX2l0ZW0tLWNvbmZpZ3VyYXRvciB7XG4gIHBhZGRpbmctYm90dG9tOiAwLjY2NjY2NjY2NjdyZW07XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5wcm9kdWN0LWJ1bmRsZV9faW1nLWJsb2NrIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDAuNjY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAyMS4zMzMzMzMzMzMzcmVtO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi1ib3R0b206IDEuMDY2NjY2NjY2N3JlbTtcbn1cbi5wcm9kdWN0LWJ1bmRsZV9faW1nLWJsb2NrOjpiZWZvcmUge1xuICBjb250ZW50OiBcIlwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgYmFja2dyb3VuZDogcmdiYSgyNiwgMjMsIDI3LCAwLjEpO1xufVxuLnByb2R1Y3QtYnVuZGxlX19pbWctYmxvY2stLWNvbmZpZ3VyYXRvciB7XG4gIHBhZGRpbmc6IDAuMzMzMzMzMzMzM3JlbTtcbiAgbWluLXdpZHRoOiA0LjY2NjY2NjY2NjdyZW07XG4gIHdpZHRoOiA0LjY2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogNC42NjY2NjY2NjY3cmVtO1xuICBtYXJnaW46IDAgMS4zMzMzMzMzMzMzcmVtIDAgMDtcbn1cbi5wcm9kdWN0LWJ1bmRsZV9faW1nIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xufVxuLnByb2R1Y3QtYnVuZGxlX19pbmZvIHtcbiAgbWluLWhlaWdodDogNi4zMzMzMzMzMzMzcmVtO1xuICBwYWRkaW5nLWJvdHRvbTogMC4zMzMzMzMzMzMzcmVtO1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtYnVuZGxlX19pbmZvIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuLnByb2R1Y3QtYnVuZGxlX19pbmZvLS1jb25maWd1cmF0b3Ige1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDA7XG4gIG1pbi1oZWlnaHQ6IDA7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuLnByb2R1Y3QtYnVuZGxlX19uYW1lIHtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBmb250LXdlaWdodDogNTAwO1xuICBsaW5lLWhlaWdodDogMS4yNjY2NjY2NjY3cmVtO1xuICBjb2xvcjogIzZmNmY2Zjtcbn1cbi5wcm9kdWN0LWJ1bmRsZV9fcXVhbnRpdHkge1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjI2NjY2NjY2NjdyZW07XG4gIGNvbG9yOiAjYjJiMmIyO1xuICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWJ1bmRsZV9fcXVhbnRpdHkge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucHJvZHVjdC1idW5kbGUtZGV0YWlsIHtcbiAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICM0YjRiNGQ7XG59XG4ucHJvZHVjdC1idW5kbGUtZGV0YWlsX19pdGVtIHtcbiAgYm9yZGVyLXRvcDogc29saWQgMXB4ICM0YjRiNGQ7XG59XG4ucHJvZHVjdC1idW5kbGUtZGV0YWlsX190aXRsZSB7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBjb2xvcjogIzZmNmY2ZjtcbiAgcGFkZGluZzogMS4ycmVtIDEuMzMzMzMzMzMzM3JlbTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4ucHJvZHVjdC1idW5kbGUtZGV0YWlsX190aXRsZTo6YmVmb3JlLCAucHJvZHVjdC1idW5kbGUtZGV0YWlsX190aXRsZTo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJhY2tncm91bmQ6ICM2ZjZmNmY7XG4gIHRvcDogNTAlO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG4ucHJvZHVjdC1idW5kbGUtZGV0YWlsX190aXRsZTo6YmVmb3JlIHtcbiAgd2lkdGg6IDEwcHg7XG4gIGhlaWdodDogMnB4O1xuICByaWdodDogMTlweDtcbn1cbi5wcm9kdWN0LWJ1bmRsZS1kZXRhaWxfX3RpdGxlOjphZnRlciB7XG4gIHdpZHRoOiAycHg7XG4gIGhlaWdodDogMTBweDtcbiAgcmlnaHQ6IDIzcHg7XG59XG4ucHJvZHVjdC1idW5kbGUtZGV0YWlsX190aXRsZS5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWExNzFiO1xufVxuLnByb2R1Y3QtYnVuZGxlLWRldGFpbF9fdGl0bGUuYWN0aXZlOjphZnRlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ucHJvZHVjdC1idW5kbGUtZGV0YWlsX19kZXNjcmlwdGlvbiB7XG4gIGZvbnQtc2l6ZTogMC44NjY2NjY2NjY3cmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBjb2xvcjogIzZmNmY2ZjtcbiAgcGFkZGluZzogMCAxLjMzMzMzMzMzMzNyZW0gMS43MzMzMzMzMzMzcmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWExNzFiO1xufVxuLnByb2R1Y3QtYnVuZGxlLWRldGFpbF9fZGV0YWlsLWxpc3Qge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWExNzFiO1xuICBwYWRkaW5nOiAwIDEuMzMzMzMzMzMzM3JlbSAxLjJyZW07XG59XG4ucHJvZHVjdC1idW5kbGUtZGV0YWlsX19kZXRhaWwtbGlzdC1rZXkge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgY29sb3I6ICM2ZjZmNmY7XG59XG4ucHJvZHVjdC1idW5kbGUtZGV0YWlsX19kZXRhaWwtbGlzdC12YWx1ZSB7XG4gIGZvbnQtc2l6ZTogMC44NjY2NjY2NjY3cmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBjb2xvcjogI2IyYjJiMjtcbiAgcGFkZGluZy1ib3R0b206IDhweDtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnByb2R1Y3QtY21zIHtcbiAgYmFja2dyb3VuZDogIzFhMTcxYjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwYWRkaW5nOiAyLjJyZW0gMCAyLjY2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNtcyB7XG4gICAgcGFkZGluZzogMy4zMzMzMzMzMzMzcmVtIDAgMS4zMzMzMzMzMzMzcmVtO1xuICB9XG59XG4ucHJvZHVjdC1jbXNfX3RpdGxlIHtcbiAgbWF4LXdpZHRoOiA5NzBweDtcbiAgbWFyZ2luOiAwIGF1dG8gMS4wNjY2NjY2NjY3cmVtO1xuICBjb2xvcjogIzZmNmY2ZjtcbiAgZm9udC1zaXplOiAxLjg2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNtc19fdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMi4xMzMzMzMzMzMzcmVtO1xuICAgIG1hcmdpbjogMCBhdXRvIDEuNnJlbTtcbiAgfVxufVxuLnByb2R1Y3QtY21zX190ZXh0IHtcbiAgbWF4LXdpZHRoOiA5NzBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNzMzMzMzMzMzM3JlbTtcbiAgY29sb3I6ICNkMGQwZDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNtc19fdGV4dCB7XG4gICAgZm9udC1zaXplOiAxLjJyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuOTMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLnByb2R1Y3QtY21zX190ZXh0IHAge1xuICBtYXJnaW46IDAgMCAxLjA2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNtc19fdGV4dCBwIHtcbiAgICBtYXJnaW46IDAgMCAxLjkzMzMzMzMzMzNyZW07XG4gIH1cbn1cbi5wcm9kdWN0LWNtc19fdGV4dCBhIHtcbiAgY29sb3I6ICNiMmIyYjI7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG4ucHJvZHVjdC1jbXNfX3RleHQgYTpob3ZlciB7XG4gIGNvbG9yOiAjNGI0YjRkO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucHJvZHVjdC1jb25maWd1cmF0b3Ige1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogM3JlbSAxcmVtIDFyZW07XG4gIG1hcmdpbjogMCAtMXJlbTtcbiAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICM0YjRiNGQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNvbmZpZ3VyYXRvciB7XG4gICAgcGFkZGluZzogMS40NjY2NjY2NjY3cmVtIDAgMDtcbiAgICBtYXJnaW46IDA7XG4gICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgfVxufVxuLnByb2R1Y3QtY29uZmlndXJhdG9yX19zaG93LW1vcmUtZGV0YWlscy1idXR0b24ge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuLnByb2R1Y3QtY29uZmlndXJhdG9yX19zaG93LW1vcmUtZGV0YWlscy1idXR0b24gLmljb24tLWNhcmV0LXJpZ2h0IHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWxlZnQ6IDAuMjVyZW07XG59XG4ucHJvZHVjdC1jb25maWd1cmF0b3IgLmhlYWRsaW5lIHtcbiAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xuICBsaW5lLWhlaWdodDogM3JlbTtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLnByb2R1Y3QtY29uZmlndXJhdG9yX190b3AtYmxvY2sge1xuICAgIGJhY2tncm91bmQ6ICM0YjRiNGQ7XG4gICAgcGFkZGluZzogMXJlbTtcbiAgICBtYXJnaW46IDAgLTFyZW07XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB9XG59XG4ucHJvZHVjdC1jb25maWd1cmF0b3JfX2JyYW5kLW5hbWUge1xuICBmb250LXNpemU6IDEuMDY2NjY2NjY2N3JlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgbGluZS1oZWlnaHQ6IDEuNTMzMzMzMzMzM3JlbTtcbiAgY29sb3I6ICM2ZjZmNmY7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1jb25maWd1cmF0b3JfX2JyYW5kLW5hbWUge1xuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICAgIG1hcmdpbi1ib3R0b206IDAuMnJlbTtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB9XG59XG4ucHJvZHVjdC1jb25maWd1cmF0b3JfX3NrdSB7XG4gIGZvbnQtc2l6ZTogMC44NjY2NjY2NjY3cmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBjb2xvcjogI2IyYjJiMjtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNvbmZpZ3VyYXRvcl9fc2t1IHtcbiAgICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjg2NjY2NjY2NjdyZW07XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgfVxufVxuLnByb2R1Y3QtY29uZmlndXJhdG9yX19idW5kbGUge1xuICBtYXJnaW4tYm90dG9tOiAtMXB4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxNDAwcHgpIHtcbiAgLnByb2R1Y3QtY29uZmlndXJhdG9yX19zaWRlYmFyIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gICAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiA0MCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiAzMy4zMzMzMzMzMzMzcmVtO1xuICB9XG4gIC5wcm9kdWN0LWNvbmZpZ3VyYXRvcl9fc2lkZWJhciA+ICoge1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDEwcHg7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMTBweDtcbiAgICByaWdodDogLTI3cmVtO1xuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDFzIGVhc2UtaW4tb3V0O1xuICAgIHRyYW5zaXRpb246IGFsbCAxcyBlYXNlLWluLW91dDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLnByb2R1Y3QtY29uZmlndXJhdG9yX19zaWRlYmFyID4gKi5zaG93IHtcbiAgICByaWdodDogMDtcbiAgfVxuICAucHJvZHVjdC1jb25maWd1cmF0b3JfX3NpZGViYXIgPiAqLmdyaWQge1xuICAgIG1heC13aWR0aDogMzMuMzMzMzMzMzMzM3JlbTtcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucHJvZHVjdC1kZXRhaWwge1xuICBwYWRkaW5nLWJvdHRvbTogMnJlbTtcbn1cbi5wcm9kdWN0LWRldGFpbF9faGVhZGxpbmUuaGVhZGxpbmUge1xuICBtYXJnaW4tdG9wOiAycmVtO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4ucHJvZHVjdC1kZXRhaWxfX2hlYWRsaW5lLS1kZXNjcmlwdGlvbi5oZWFkbGluZSB7XG4gIG1hcmdpbi10b3A6IDJyZW07XG4gIG1hcmdpbi1ib3R0b206IDFyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5wcm9kdWN0LWRldGFpbF9faGVhZGxpbmUtLWRlc2NyaXB0aW9uLmhlYWRsaW5lOjpiZWZvcmUge1xuICBjb250ZW50OiBcIlwiO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAxN3JlbTtcbiAgbWFyZ2luLXRvcDogLTE3cmVtO1xuICB6LWluZGV4OiAtMTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtZGV0YWlsX19oZWFkbGluZS0tZGVzY3JpcHRpb24uaGVhZGxpbmU6OmJlZm9yZSB7XG4gICAgaGVpZ2h0OiAyMnJlbTtcbiAgICBtYXJnaW4tdG9wOiAtMjJyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wcm9kdWN0LWRldGFpbF9faGVhZGxpbmUtLWRlc2NyaXB0aW9uLmhlYWRsaW5lOjpiZWZvcmUge1xuICAgIGhlaWdodDogOXJlbTtcbiAgICBtYXJnaW4tdG9wOiAtOXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnByb2R1Y3QtZGV0YWlsX19kZXNjcmlwdGlvbiB7XG4gICAgLXdlYmtpdC1jb2x1bW5zOiAyO1xuICAgICAgIC1tb3otY29sdW1uczogMjtcbiAgICAgICAgICAgIGNvbHVtbnM6IDI7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyM3B4KSB7XG4gIC5wcm9kdWN0LWRldGFpbF9fZGV0YWlsLWxpc3QtY29sIHtcbiAgICBwYWRkaW5nLXRvcDogMXJlbTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMXJlbTtcbiAgfVxuICAucHJvZHVjdC1kZXRhaWxfX2RldGFpbC1saXN0LWNvbDpmaXJzdC1jaGlsZCB7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gIH1cbiAgLnByb2R1Y3QtZGV0YWlsX19kZXRhaWwtbGlzdC1jb2w6bGFzdC1jaGlsZCB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wcm9kdWN0LWRldGFpbF9fZGV0YWlsLWxpc3QtY29sIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XG4gIH1cbiAgLnByb2R1Y3QtZGV0YWlsX19kZXRhaWwtbGlzdC1jb2w6Zmlyc3QtY2hpbGQge1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgfVxuICAucHJvZHVjdC1kZXRhaWxfX2RldGFpbC1saXN0LWNvbDpsYXN0LWNoaWxkIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB9XG59XG4ucHJvZHVjdC1kZXRhaWxfX2RldGFpbC1saXN0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbi5wcm9kdWN0LWRldGFpbF9fZGV0YWlsLWxpc3QtaXRlbSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IHN0YXJ0O1xuICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBwYWRkaW5nOiAwLjVyZW0gMDtcbn1cbi5wcm9kdWN0LWRldGFpbF9fZGV0YWlsLWxpc3QtaXRlbTpudGgtY2hpbGQob2RkKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7XG59XG4ucHJvZHVjdC1kZXRhaWxfX2RldGFpbC1saXN0LWtleSB7XG4gIC1tcy13b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLWJsb2NrLW5vLWR1cGxpY2F0ZS1wcm9wZXJ0aWVzICovXG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIC1tcy1oeXBoZW5zOiBhdXRvO1xuICAgICAgaHlwaGVuczogYXV0bztcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4OiAxO1xuICAgICAgICAgIGZsZXg6IDE7XG4gIHBhZGRpbmctbGVmdDogMC41cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xufVxuLnByb2R1Y3QtZGV0YWlsX19kZXRhaWwtbGlzdC12YWx1ZSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXg6IDE7XG4gICAgICAgICAgZmxleDogMTtcbiAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG59XG4ucHJvZHVjdC1kZXRhaWxfX3Nob3ctbW9yZS1kZXRhaWxzLWJ1dHRvbi1jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi52YXJpYW50IHtcbiAgcGFkZGluZzogMCAwLjVyZW07XG59XG4udmFyaWFudDpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogLTAuMDY2NjY2NjY2N3JlbTtcbn1cbi52YXJpYW50LS1wcm9tb3Rpb24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDI7XG4gIGJvcmRlcjogbm9uZTtcbn1cbi52YXJpYW50LS1wcm9tb3Rpb246bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG4udmFyaWFudC0tcHJvZHVjdC1zZXQge1xuICBib3JkZXI6IG5vbmU7XG4gIG1hcmdpbi1ib3R0b206IDAuNTMzMzMzMzMzM3JlbTtcbn1cbi52YXJpYW50LS1wcm9kdWN0LXNldDpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyOiBub25lO1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLnZhcmlhbnRfX3RpdGxlIHtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG59XG4udmFyaWFudF9fdGl0bGUtLXByb2R1Y3Qtc2V0IHtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjg2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC52YXJpYW50X190aXRsZS0tcHJvZHVjdC1zZXQge1xuICAgIGZvbnQtc2l6ZTogMS4wNjY2NjY2NjY3cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAyLjEzMzMzMzMzMzNyZW07XG4gIH1cbn1cbi52YXJpYW50X19zZWxlY3RlZC12YWx1ZSB7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBjb2xvcjogI2IyYjJiMjtcbiAgbWFyZ2luOiAtMC4zMzMzMzMzMzMzcmVtIDAgMXJlbTtcbn1cbi52YXJpYW50LS1yZXNldCB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IDAgMC41cmVtO1xufVxuLnZhcmlhbnQtLXJlc2V0IC5idXR0b24ge1xuICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcbn1cbi52YXJpYW50IC5jdXN0b20tc2VsZWN0LnNlbGVjdGVkIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG4udmFyaWFudCAuY3VzdG9tLXNlbGVjdC5zZWxlY3RlZCAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIHtcbiAgY29sb3I6ICNiMmIyYjI7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnF1YW50aXR5LW9wdGlvbiB7XG4gIGZvbnQtc2l6ZTogMC44NjY2NjY2NjY3cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucXVhbnRpdHktb3B0aW9uIHtcbiAgICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uc3dpdGNoIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBtYXJnaW4tbGVmdCAyNTBtcyBlYXNlLWluLW91dCwgYmFja2dyb3VuZC1jb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogbWFyZ2luLWxlZnQgMjUwbXMgZWFzZS1pbi1vdXQsIGJhY2tncm91bmQtY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAyLjI2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMC45MzMzMzMzMzMzcmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIzNiwgMjM2LCAyMzYsIDAuNik7XG4gIGJvcmRlci1yYWRpdXM6IDAuNDY2NjY2NjY2N3JlbTtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIG1hcmdpbjogMC4ycmVtIDAgMC4ycmVtIDAuNjY2NjY2NjY2N3JlbTtcbn1cbi5zd2l0Y2hfX2hhbmRsZSB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogbGVmdCAyNTBtcyBlYXNlLWluLW91dCwgYmFja2dyb3VuZC1jb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogbGVmdCAyNTBtcyBlYXNlLWluLW91dCwgYmFja2dyb3VuZC1jb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEuMzMzMzMzMzMzM3JlbTtcbiAgaGVpZ2h0OiAxLjMzMzMzMzMzMzNyZW07XG4gIG1hcmdpbjogLTAuMnJlbSAwIDAgLTAuNjY2NjY2NjY2N3JlbTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMC4xMzMzMzMzMzMzcmVtIDAuMjY2NjY2NjY2N3JlbSByZ2JhKDE3OCwgMTc4LCAxNzgsIDAuMik7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwLjEzMzMzMzMzMzNyZW0gMC4yNjY2NjY2NjY3cmVtIHJnYmEoMTc4LCAxNzgsIDE3OCwgMC4yKTtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xufVxuLnN3aXRjaC0tYWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTQsIDIwNCwgMCwgMC41KTtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG4uc3dpdGNoLS1hY3RpdmUgLnN3aXRjaF9faGFuZGxlIHtcbiAgbGVmdDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZlY2MwMDtcbn1cbi5zd2l0Y2hbZGlzYWJsZWRdIHtcbiAgb3BhY2l0eTogMC41O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29udGVudC1jb2xsYXBzZXItLWZ1bGwtdmlzaWJsZSAuY29udGVudC1jb2xsYXBzZXJfX2NvbnRhaW5lciB7XG4gIG1heC1oZWlnaHQ6IG5vbmU7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4uY29udGVudC1jb2xsYXBzZXItLWZ1bGwtdmlzaWJsZSAuY29udGVudC1jb2xsYXBzZXJfX2NvbnRhaW5lcjo6YWZ0ZXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuLmNvbnRlbnQtY29sbGFwc2VyLS1mdWxsLXZpc2libGUgLmNvbnRlbnQtY29sbGFwc2VyX190cmlnZ2VyLWhvbGRlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uY29udGVudC1jb2xsYXBzZXJfX2NvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWF4LWhlaWdodDogMTQuNjY2NjY2NjY2N3JlbTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNvbnRlbnQtY29sbGFwc2VyX19jb250YWluZXIge1xuICAgIG1heC1oZWlnaHQ6IG5vbmU7XG4gIH1cbn1cbi5jb250ZW50LWNvbGxhcHNlcl9fY29udGFpbmVyOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiA1LjMzMzMzMzMzMzNyZW07XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAtMy4zMzMzMzMzMzMzcmVtIDUuMzMzMzMzMzMzM3JlbSAwICNmZmY7XG4gICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMy4zMzMzMzMzMzMzcmVtIDUuMzMzMzMzMzMzM3JlbSAwICNmZmY7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jb250ZW50LWNvbGxhcHNlcl9fY29udGFpbmVyOjphZnRlciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLmNvbnRlbnQtY29sbGFwc2VyX19jb250YWluZXItLXdpdGgtYmFja2dyb3VuZDo6YWZ0ZXIge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgLTMuMzMzMzMzMzMzM3JlbSA1LjMzMzMzMzMzMzNyZW0gMCAjMWExNzFiO1xuICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTMuMzMzMzMzMzMzM3JlbSA1LjMzMzMzMzMzMzNyZW0gMCAjMWExNzFiO1xufVxuLmNvbnRlbnQtY29sbGFwc2VyX190cmlnZ2VyLWhvbGRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZy1ib3R0b206IDEuNzMzMzMzMzMzM3JlbTtcbiAgcGFkZGluZy10b3A6IDEuNzMzMzMzMzMzM3JlbTtcbn1cbi5jb250ZW50LWNvbGxhcHNlcl9fdHJpZ2dlci1ob2xkZXItLXdpdGgtYmFja2dyb3VuZCB7XG4gIGJhY2tncm91bmQ6ICMxYTE3MWI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jb250ZW50LWNvbGxhcHNlcl9fdHJpZ2dlci1ob2xkZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvcHlyaWdodC1idWlsZC13aXRoIHtcbiAgZm9udDogNzAwIDAuOHJlbS8xcmVtIFwiTGF0b1wiLCBzYW5zLXNlcmlmO1xuICBsZXR0ZXItc3BhY2luZzogMC4wNDQ2NjY2NjY3cmVtO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBwYWRkaW5nLXRvcDogMS4yNjY2NjY2NjY3cmVtO1xuICBwYWRkaW5nLWJvdHRvbTogMS40cmVtO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuLmNvcHlyaWdodC1idWlsZC13aXRoX190ZXh0IHtcbiAgbWFyZ2luLXJpZ2h0OiAxLjJyZW07XG4gIHBhZGRpbmctdG9wOiAwLjhyZW07XG59XG4uY29weXJpZ2h0LWJ1aWxkLXdpdGhfX2xpbmsge1xuICBjb2xvcjogI2ZmZjtcbn1cbi5jb3B5cmlnaHQtYnVpbGQtd2l0aF9fbGluazpob3ZlciwgLmNvcHlyaWdodC1idWlsZC13aXRoX19saW5rOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5jdXN0b20tc2VsZWN0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5jdXN0b20tc2VsZWN0X19zZWxlY3Qge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgYm9yZGVyOiAwLjA2NjY2NjY2NjdyZW0gc29saWQgI2VjZWNlYztcbiAgY29sb3I6ICM2ZjZmNmY7XG4gIGZvbnQ6IDQwMCAxcmVtLzMuMDY2NjY2NjY2N3JlbSBcIkxhdG9cIiwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAwLjg2NjY2NjY2NjdyZW07XG4gIHBhZGRpbmc6IDAgMi4zMzMzMzMzMzMzcmVtIDAgMS4wNjY2NjY2NjY3cmVtO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgICBhcHBlYXJhbmNlOiBub25lO1xufVxuLmN1c3RvbS1zZWxlY3RfX3NlbGVjdCBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY3VzdG9tLXNlbGVjdF9fc2VsZWN0IHtcbiAgICBwYWRkaW5nOiAwIDNyZW0gMCAxLjMzMzMzMzMzMzNyZW07XG4gICAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIH1cbn1cbi5jdXN0b20tc2VsZWN0X19jYXJldCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTtcbiAgdG9wOiA1MCU7XG4gIHJpZ2h0OiAxLjA2NjY2NjY2NjdyZW07XG4gIHdpZHRoOiBhdXRvO1xuICBoZWlnaHQ6IDEwMCU7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG4uY3VzdG9tLXNlbGVjdF9fY2FyZXQgc3ZnIHtcbiAgd2lkdGg6IDEuMzMzMzMzMzMzM3JlbTtcbiAgaGVpZ2h0OiAxLjMzMzMzMzMzMzNyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jdXN0b20tc2VsZWN0X19jYXJldCB7XG4gICAgcmlnaHQ6IDEuNHJlbTtcbiAgfVxufVxuLmN1c3RvbS1zZWxlY3QtLWRpZmZlcmVudC1tb2ItY2FyZXQgLmN1c3RvbS1zZWxlY3RfX2NhcmV0IHtcbiAgd2lkdGg6IDAuNDY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAwLjczMzMzMzMzMzNyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jdXN0b20tc2VsZWN0LS1kaWZmZXJlbnQtbW9iLWNhcmV0IC5jdXN0b20tc2VsZWN0X19jYXJldCB7XG4gICAgd2lkdGg6IDAuOHJlbTtcbiAgICBoZWlnaHQ6IDAuNDY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLmN1c3RvbS1zZWxlY3QtLWFsdGVybmF0aXZlIHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgd2lkdGg6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jdXN0b20tc2VsZWN0LS1hbHRlcm5hdGl2ZSB7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbn1cbi5jdXN0b20tc2VsZWN0LS1hbHRlcm5hdGl2ZSAuY3VzdG9tLXNlbGVjdF9fc2VsZWN0IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xuICBsaW5lLWhlaWdodDogMi41MzMzMzMzMzMzcmVtO1xuICBwYWRkaW5nOiAwIDEuMzMzMzMzMzMzM3JlbSAwIDAuNjY2NjY2NjY2N3JlbTtcbiAgYm9yZGVyOiAwLjA2NjY2NjY2NjdyZW0gc29saWQgI2VjZWNlYztcbiAgY29sb3I6ICM2ZjZmNmY7XG4gIGJhY2tncm91bmQ6ICM0YjRiNGQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jdXN0b20tc2VsZWN0LS1hbHRlcm5hdGl2ZSAuY3VzdG9tLXNlbGVjdF9fc2VsZWN0IHtcbiAgICB3aWR0aDogYXV0bztcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgY29sb3I6ICM5MjkyOTI7XG4gICAgZm9udC1zaXplOiAwLjczMzMzMzMzMzNyZW07XG4gICAgbGluZS1oZWlnaHQ6IDIuNjY2NjY2NjY2N3JlbTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjA0cmVtO1xuICAgIHBhZGRpbmc6IDAgMnJlbSAwIDEuMnJlbTtcbiAgfVxufVxuLmN1c3RvbS1zZWxlY3QtLWFsdGVybmF0aXZlIC5jdXN0b20tc2VsZWN0X19jYXJldCB7XG4gIHdpZHRoOiAwLjQ2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMC43MzMzMzMzMzMzcmVtO1xuICByaWdodDogMC42NjY2NjY2NjY3cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY3VzdG9tLXNlbGVjdC0tYWx0ZXJuYXRpdmUgLmN1c3RvbS1zZWxlY3RfX2NhcmV0IHtcbiAgICByaWdodDogMC44NjY2NjY2NjY3cmVtO1xuICAgIHdpZHRoOiAwLjQ2NjY2NjY2NjdyZW07XG4gICAgaGVpZ2h0OiAwLjI2NjY2NjY2NjdyZW07XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTAuMTMzMzMzMzMzM3JlbSk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTAuMTMzMzMzMzMzM3JlbSk7XG4gIH1cbn1cbi5jdXN0b20tc2VsZWN0LS1zbWFsbCAuY3VzdG9tLXNlbGVjdF9fc2VsZWN0IHtcbiAgZm9udC1zaXplOiAwLjg2NjY2NjY2NjdyZW07XG4gIGxpbmUtaGVpZ2h0OiAyLjUzMzMzMzMzMzNyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jdXN0b20tc2VsZWN0LS1zbWFsbCAuY3VzdG9tLXNlbGVjdF9fc2VsZWN0IHtcbiAgICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICB9XG59XG4uY3VzdG9tLXNlbGVjdC0tbW9iaWxlLWV4cGFuZCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY3VzdG9tLXNlbGVjdC0tbW9iaWxlLWV4cGFuZCB7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbn1cbi5jdXN0b20tc2VsZWN0LS1tb2JpbGUtZXhwYW5kIC5jdXN0b20tc2VsZWN0X19zZWxlY3Qge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY3VzdG9tLXNlbGVjdC0tbW9iaWxlLWV4cGFuZCAuY3VzdG9tLXNlbGVjdF9fc2VsZWN0IHtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxufVxuLmN1c3RvbS1zZWxlY3QtLWZ1bGwtd2lkdGgge1xuICB3aWR0aDogMTAwJTtcbn1cbi5jdXN0b20tc2VsZWN0LS1mdWxsLXdpZHRoIC5jdXN0b20tc2VsZWN0X19zZWxlY3Qge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLmN1c3RvbS1zZWxlY3QtLW1hcmdpbi1ib3R0b20ge1xuICBtYXJnaW4tYm90dG9tOiAxLjRyZW07XG59XG4uY3VzdG9tLXNlbGVjdC0tbGlnaHQgLmN1c3RvbS1zZWxlY3RfX3NlbGVjdCxcbi5jdXN0b20tc2VsZWN0LS1saWdodCAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4uY3VzdG9tLXNlbGVjdC0tbGlnaHQgLmN1c3RvbS1zZWxlY3RfX3NlbGVjdCBzdmcsXG4uY3VzdG9tLXNlbGVjdC0tbGlnaHQgLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmN1c3RvbS1zZWxlY3QtLWVycm9yIC5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQge1xuICBib3JkZXItY29sb3I6ICNlMzIyMTM7XG59XG5cbi5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gIGNvbG9yOiAjNmY2ZjZmO1xuICBmb250OiA0MDAgMXJlbS8zLjA2NjY2NjY2NjdyZW0gXCJMYXRvXCIsIHNhbnMtc2VyaWY7XG4gIHBhZGRpbmc6IDAgM3JlbSAwIDEuMzMzMzMzMzMzM3JlbTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cbi5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi5zZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3cge1xuICBkaXNwbGF5OiBub25lO1xufVxuLnNlbGVjdDItaGlkZGVuLWFjY2Vzc2libGUge1xuICBib3JkZXI6IDA7XG4gIGNsaXA6IHJlY3QoMCAwIDAgMCk7XG4gIGNsaXAtcGF0aDogaW5zZXQoNTAlKTtcbiAgaGVpZ2h0OiAwLjA2NjY2NjY2NjdyZW07XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmc6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDAuMDY2NjY2NjY2N3JlbTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbi5zZWxlY3QyLWNvbnRhaW5lciB7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbjogMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLnNlbGVjdDItY29udGFpbmVyLS1hbHRlcm5hdGl2ZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIHtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm9yZGVyOiBub25lO1xuICBjb2xvcjogIzkyOTI5MjtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgZm9udC1zaXplOiAwLjczMzMzMzMzMzNyZW07XG4gIGxpbmUtaGVpZ2h0OiAyLjY2NjY2NjY2NjdyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxldHRlci1zcGFjaW5nOiAwLjA0cmVtO1xuICBwYWRkaW5nOiAwIDJyZW0gMCAxLjJyZW07XG59XG4uc2VsZWN0Mi1jb250YWluZXItLWFsdGVybmF0aXZlIC5zZWxlY3QyLWRyb3Bkb3duIHtcbiAgcGFkZGluZzogMC43MzMzMzMzMzMzcmVtIDAgMC44cmVtIDEuMjY2NjY2NjY2N3JlbTtcbiAgYm9yZGVyLXJhZGl1czogMCAwIDEwcHggMTBweDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDEuMnJlbSAxLjJyZW0gMCByZ2JhKDc1LCA3NSwgNzcsIDAuMiksIDAgMC4ycmVtIDAuMnJlbSAwIHJnYmEoNzUsIDc1LCA3NywgMC4yKTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDEuMnJlbSAxLjJyZW0gMCByZ2JhKDc1LCA3NSwgNzcsIDAuMiksIDAgMC4ycmVtIDAuMnJlbSAwIHJnYmEoNzUsIDc1LCA3NywgMC4yKTtcbn1cbi5zZWxlY3QyLWNvbnRhaW5lci0tYWx0ZXJuYXRpdmUgLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIHtcbiAgcGFkZGluZzogMDtcbiAgZm9udC1zaXplOiAwLjg2NjY2NjY2NjdyZW07XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIC8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbi5zZWxlY3QyLWNvbnRhaW5lci0tYWx0ZXJuYXRpdmUgLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWQ9dHJ1ZV06OmJlZm9yZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uc2VsZWN0Mi1jb250YWluZXItLXNtYWxsIC5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgbGluZS1oZWlnaHQ6IDIuNTMzMzMzMzMzM3JlbTtcbn1cbi5zZWxlY3QyLWNvbnRhaW5lci0tc21hbGwgLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uIHtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG59XG4uc2VsZWN0Mi1jb250YWluZXItLWRpc2FibGVkIC5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQge1xuICBjb2xvcjogI2QwZDBkMDtcbiAgYm9yZGVyLWNvbG9yOiAjZWNlY2VjO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLnNlbGVjdDItY29udGFpbmVyLS1kaXNhYmxlZCB+IC5jdXN0b20tc2VsZWN0X19jYXJldCB7XG4gIGNvbG9yOiAjZWNlY2VjO1xufVxuLnNlbGVjdDItZHJvcGRvd24ge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMTBweDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMTBweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyMDAxO1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJvcmRlcjogbm9uZTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAxcmVtIDEuMzMzMzMzMzMzM3JlbSAxcmVtIDFyZW07XG4gIGJhY2tncm91bmQ6ICNmZmY7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAxLjJyZW0gMS4ycmVtIDAgcmdiYSg3NSwgNzUsIDc3LCAwLjIpLCAwIDAuMnJlbSAwLjJyZW0gMCByZ2JhKDc1LCA3NSwgNzcsIDAuMik7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAxLjJyZW0gMS4ycmVtIDAgcmdiYSg3NSwgNzUsIDc3LCAwLjIpLCAwIDAuMnJlbSAwLjJyZW0gMCByZ2JhKDc1LCA3NSwgNzcsIDAuMik7XG4gIG1heC1oZWlnaHQ6IDIwcmVtO1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG59XG4uc2VsZWN0Mi1zZWFyY2gtLWRyb3Bkb3duLnNlbGVjdDItc2VhcmNoLS1oaWRlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5zZWxlY3QyLXJlc3VsdHMge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5zZWxlY3QyLXJlc3VsdHNfX29wdGlvbiB7XG4gIGNvbG9yOiAjYjJiMmIyO1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjg3O1xuICBsZXR0ZXItc3BhY2luZzogMC4wMTMzMzMzMzMzcmVtO1xuICBwYWRkaW5nOiAwIDAgMCAxLjhyZW07XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWQ9dHJ1ZV0ge1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25bYXJpYS1zZWxlY3RlZD10cnVlXTo6YmVmb3JlIHtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3JkZXItbGVmdDogMC4xMzMzMzMzMzMzcmVtIHNvbGlkICNiMmIyYjI7XG4gIGJvcmRlci1ib3R0b206IDAuMTMzMzMzMzMzM3JlbSBzb2xpZCAjYjJiMmIyO1xuICB3aWR0aDogMC42NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDAuNHJlbTtcbiAgdG9wOiAwLjZyZW07XG4gIGxlZnQ6IDAuMnJlbTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpO1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XG59XG4uc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWhpZ2hsaWdodGVkW2FyaWEtc2VsZWN0ZWRdIHtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgY29sb3I6ICNiMmIyYjI7XG59XG4uc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWhpZ2hsaWdodGVkW2FyaWEtc2VsZWN0ZWRdOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgY29sb3I6ICM2ZjZmNmY7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1oaWdobGlnaHRlZFthcmlhLXNlbGVjdGVkXTpob3Zlcjo6YmVmb3JlIHtcbiAgYm9yZGVyLWNvbG9yOiAjNmY2ZjZmO1xufSIsIi54ZHNvZnRfZGF0ZXRpbWVwaWNrZXJ7LXdlYmtpdC1ib3gtc2hhZG93OjAgNXB4IDE1cHggLTVweCByZ2JhKDAsMCwwLDAuNTA2KTtib3gtc2hhZG93OjAgNXB4IDE1cHggLTVweCByZ2JhKDAsMCwwLDAuNTA2KTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2JiYjtib3JkZXItbGVmdDoxcHggc29saWQgI2NjYztib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXRvcDoxcHggc29saWQgI2NjYztjb2xvcjojMzMzO2ZvbnQtZmFtaWx5OlwiSGVsdmV0aWNhIE5ldWVcIixIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjtwYWRkaW5nOjhweDtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXRvcDoycHg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDo5OTk5Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5Om5vbmV9Lnhkc29mdF9kYXRldGltZXBpY2tlci54ZHNvZnRfcnRse3BhZGRpbmc6OHB4IDAgOHB4IDhweH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIGlmcmFtZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7d2lkdGg6NzVweDtoZWlnaHQ6MjEwcHg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6MH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIGJ1dHRvbntib3JkZXI6bm9uZSAhaW1wb3J0YW50fS54ZHNvZnRfbm9zZWxlY3R7LXdlYmtpdC10b3VjaC1jYWxsb3V0Om5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTstby11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9Lnhkc29mdF9ub3NlbGVjdDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZDp0cmFuc3BhcmVudH0ueGRzb2Z0X25vc2VsZWN0OjpzZWxlY3Rpb257YmFja2dyb3VuZDp0cmFuc3BhcmVudH0ueGRzb2Z0X25vc2VsZWN0OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIueGRzb2Z0X2lubGluZXtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpzdGF0aWM7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgKnstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowO21hcmdpbjowfS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLnhkc29mdF9kYXRlcGlja2VyLC54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLnhkc29mdF90aW1lcGlja2Vye2Rpc3BsYXk6bm9uZX0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfZGF0ZXBpY2tlci5hY3RpdmUsLnhkc29mdF9kYXRldGltZXBpY2tlciAueGRzb2Z0X3RpbWVwaWNrZXIuYWN0aXZle2Rpc3BsYXk6YmxvY2t9Lnhkc29mdF9kYXRldGltZXBpY2tlciAueGRzb2Z0X2RhdGVwaWNrZXJ7d2lkdGg6MjI0cHg7ZmxvYXQ6bGVmdDttYXJnaW4tbGVmdDo4cHh9Lnhkc29mdF9kYXRldGltZXBpY2tlci54ZHNvZnRfcnRsIC54ZHNvZnRfZGF0ZXBpY2tlcntmbG9hdDpyaWdodDttYXJnaW4tcmlnaHQ6OHB4O21hcmdpbi1sZWZ0OjB9Lnhkc29mdF9kYXRldGltZXBpY2tlci54ZHNvZnRfc2hvd3dlZWtzIC54ZHNvZnRfZGF0ZXBpY2tlcnt3aWR0aDoyNTZweH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfdGltZXBpY2tlcnt3aWR0aDo1OHB4O2Zsb2F0OmxlZnQ7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi10b3A6MH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyLnhkc29mdF9ydGwgLnhkc29mdF90aW1lcGlja2Vye2Zsb2F0OnJpZ2h0O21hcmdpbi1yaWdodDo4cHg7bWFyZ2luLWxlZnQ6MH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfZGF0ZXBpY2tlci5hY3RpdmUrLnhkc29mdF90aW1lcGlja2Vye21hcmdpbi10b3A6OHB4O21hcmdpbi1ib3R0b206M3B4fS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLnhkc29mdF9tb250aHBpY2tlcntwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcn0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfbGFiZWwgaSwueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfcHJldiwueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfbmV4dCwueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfdG9kYXlfYnV0dG9ue2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBR1FBQUFBZUNBWUFBQURhVzd2ekFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNeTFqTURFeElEWTJMakUwTlRZMk1Td2dNakF4TWk4d01pOHdOaTB4TkRvMU5qb3lOeUFnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTmlBb1YybHVaRzkzY3lraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlEwTkJSakkxTmpNME0wVXdNVEZGTkRrNE5rRkdNekpGUWtRelFqRXdSVUlpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UTBOQlJqSTFOalEwTTBVd01URkZORGs0TmtGR016SkZRa1F6UWpFd1JVSWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBEUTBGR01qVTJNVFF6UlRBeE1VVTBPVGcyUVVZek1rVkNSRE5DTVRCRlFpSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERRMEZHTWpVMk1qUXpSVEF4TVVVME9UZzJRVVl6TWtWQ1JETkNNVEJGUWlJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BvTkVQNTRBQUFJT1NVUkJWSGphN0pxOVRzTXdFTWN4clpENFdwQlllS1VDZStrVE1DQUNIWmg0QkZmSE8vQUFJSFpHRmhZa0JCc1NFcXhzTENBZ1hLaGJYWU9UeGg5cGZKVlArcXV0blo1cy81THoyWTVJMDNRaFdqaTJHSWNnQW9rV2dmQ3hOdmNPQ0NHS3FpU3FoVXAwbGFIT25lMDV2ZEV5R01ma2R4SkRWamd3RGxFUWdZUUJneCtVTEphV1NYWFM2ci9FUjVGQlZSOFZmR2Z0VEtjSVROcythMVhwY0ZvRXhSRUlERjE0QVZJRnhnUVVTK2g1MjBjZHVkNndOa0MwVUJ3NkJDTy9Ib0NZd0JoRDhRQ2tRL3gxbXdEeUQ0cGxoNEQ2RERWMFRBR3lvNEhjYXdMSUJCU0xEa0hlSDBNZzJ5VlAzbDRUUU1aUUREc0VPbC9NZ0hRcWhNTnVFMEQrb0JoMENJcjhNQUt5YXpCSDlXeUJ1S3hEV2diWGZqTmYzMlRaMUtXbS9BcDFvU2svUjUzVXRRNXhUaDNMVWxNbVQ4Z3Q2ZzUxUTlwK1NvYnhnSlEvcW1zZlpoV3l3R0ZTbDB5QmpDTEpDTWdYYWlsM2I3K3J1bWRWSjJZUnNzNGNOK3I2cUFIRGtQV2pQamRKQ0Y0bjlSbUFEL1Y5QS9XcDROUWFzc0Rqd2xCNlhCaUN4Y0pRV21aWmI4VEhGaWxmeS9sZnJUdkxnaHEyVHFUSHJSTVRLTkowc0loZG8xNVJUK1JweVd3RmRZOTZVWi9MZFFLQkdqY1hwY2MxQWxTRkVmTG1vdUQrMWtudXhCRFVWcnZPQm1vT0MvckVjTjdPUXhLVmVKVENpQWRVelVKaEEyT2V6OVFUa3A3Mk9UVmN4RGNYWThpS05reEdBSlhtSkNPUXdPYTZkaHlYc09hNlh3RUdBS2RlYjVFVDNyUWRBQUFBQUVsRlRrU3VRbUNDKX0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfbGFiZWwgaXtvcGFjaXR5Oi41O2JhY2tncm91bmQtcG9zaXRpb246LTkycHggLTE5cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6OXB4O2hlaWdodDoyMHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfcHJldntmbG9hdDpsZWZ0O2JhY2tncm91bmQtcG9zaXRpb246LTIwcHggMH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfdG9kYXlfYnV0dG9ue2Zsb2F0OmxlZnQ7YmFja2dyb3VuZC1wb3NpdGlvbjotNzBweCAwO21hcmdpbi1sZWZ0OjVweH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfbmV4dHtmbG9hdDpyaWdodDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfbmV4dCwueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfcHJldiwueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfdG9kYXlfYnV0dG9ue2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JvcmRlcjowIG5vbmU7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MzBweDtvcGFjaXR5Oi41Oy1tcy1maWx0ZXI6XCJhbHBoYShvcGFjaXR5PTUwKVwiO291dGxpbmU6bWVkaXVtIG5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWluZGVudDoxMDAlO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoyMHB4O21pbi13aWR0aDowfS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLnhkc29mdF90aW1lcGlja2VyIC54ZHNvZnRfcHJldiwueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfdGltZXBpY2tlciAueGRzb2Z0X25leHR7ZmxvYXQ6bm9uZTtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MHB4IC0xNXB4O2hlaWdodDoxNXB4O3dpZHRoOjMwcHg7ZGlzcGxheTpibG9jazttYXJnaW4tbGVmdDoxNHB4O21hcmdpbi10b3A6N3B4fS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIueGRzb2Z0X3J0bCAueGRzb2Z0X3RpbWVwaWNrZXIgLnhkc29mdF9wcmV2LC54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIueGRzb2Z0X3J0bCAueGRzb2Z0X3RpbWVwaWNrZXIgLnhkc29mdF9uZXh0e2Zsb2F0Om5vbmU7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MTRweH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfdGltZXBpY2tlciAueGRzb2Z0X3ByZXZ7YmFja2dyb3VuZC1wb3NpdGlvbjotNDBweCAwO21hcmdpbi1ib3R0b206N3B4O21hcmdpbi10b3A6MH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfdGltZXBpY2tlciAueGRzb2Z0X3RpbWVfYm94e2hlaWdodDoxNTFweDtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfdGltZXBpY2tlciAueGRzb2Z0X3RpbWVfYm94PmRpdj5kaXZ7YmFja2dyb3VuZDojZjVmNWY1O2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGQ7Y29sb3I6IzY2Njtmb250LXNpemU6MTJweDt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyLWJvdHRvbS13aWR0aDowO2hlaWdodDoyNXB4O2xpbmUtaGVpZ2h0OjI1cHh9Lnhkc29mdF9kYXRldGltZXBpY2tlciAueGRzb2Z0X3RpbWVwaWNrZXIgLnhkc29mdF90aW1lX2JveD5kaXY+ZGl2OmZpcnN0LWNoaWxke2JvcmRlci10b3Atd2lkdGg6MH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfdG9kYXlfYnV0dG9uOmhvdmVyLC54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLnhkc29mdF9uZXh0OmhvdmVyLC54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLnhkc29mdF9wcmV2OmhvdmVye29wYWNpdHk6MTstbXMtZmlsdGVyOlwiYWxwaGEob3BhY2l0eT0xMDApXCJ9Lnhkc29mdF9kYXRldGltZXBpY2tlciAueGRzb2Z0X2xhYmVse2Rpc3BsYXk6aW5saW5lO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6OTk5OTttYXJnaW46MDtwYWRkaW5nOjVweCAzcHg7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MjBweDtmb250LXdlaWdodDpib2xkO2JhY2tncm91bmQtY29sb3I6I2ZmZjtmbG9hdDpsZWZ0O3dpZHRoOjE4MnB4O3RleHQtYWxpZ246Y2VudGVyO2N1cnNvcjpwb2ludGVyfS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLnhkc29mdF9sYWJlbDpob3Zlcj5zcGFue3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9Lnhkc29mdF9kYXRldGltZXBpY2tlciAueGRzb2Z0X2xhYmVsOmhvdmVyIGl7b3BhY2l0eToxLjB9Lnhkc29mdF9kYXRldGltZXBpY2tlciAueGRzb2Z0X2xhYmVsPi54ZHNvZnRfc2VsZWN0e2JvcmRlcjoxcHggc29saWQgI2NjYztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDozMHB4O3otaW5kZXg6MTAxO2Rpc3BsYXk6bm9uZTtiYWNrZ3JvdW5kOiNmZmY7bWF4LWhlaWdodDoxNjBweDtvdmVyZmxvdy15OmhpZGRlbn0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfbGFiZWw+Lnhkc29mdF9zZWxlY3QueGRzb2Z0X21vbnRoc2VsZWN0e3JpZ2h0Oi03cHh9Lnhkc29mdF9kYXRldGltZXBpY2tlciAueGRzb2Z0X2xhYmVsPi54ZHNvZnRfc2VsZWN0Lnhkc29mdF95ZWFyc2VsZWN0e3JpZ2h0OjJweH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfbGFiZWw+Lnhkc29mdF9zZWxlY3Q+ZGl2Pi54ZHNvZnRfb3B0aW9uOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZmY4MDAwfS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLnhkc29mdF9sYWJlbD4ueGRzb2Z0X3NlbGVjdD5kaXY+Lnhkc29mdF9vcHRpb257cGFkZGluZzoycHggMTBweCAycHggNXB4O3RleHQtZGVjb3JhdGlvbjpub25lICFpbXBvcnRhbnR9Lnhkc29mdF9kYXRldGltZXBpY2tlciAueGRzb2Z0X2xhYmVsPi54ZHNvZnRfc2VsZWN0PmRpdj4ueGRzb2Z0X29wdGlvbi54ZHNvZnRfY3VycmVudHtiYWNrZ3JvdW5kOiMzYWY7LXdlYmtpdC1ib3gtc2hhZG93OiMxNzhmZTUgMCAxcHggM3B4IDAgaW5zZXQ7Ym94LXNoYWRvdzojMTc4ZmU1IDAgMXB4IDNweCAwIGluc2V0O2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6NzAwfS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLnhkc29mdF9tb250aHt3aWR0aDoxMDBweDt0ZXh0LWFsaWduOnJpZ2h0fS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLnhkc29mdF9jYWxlbmRhcntjbGVhcjpib3RofS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLnhkc29mdF95ZWFye3dpZHRoOjQ4cHg7bWFyZ2luLWxlZnQ6NXB4fS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLnhkc29mdF9jYWxlbmRhciB0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7d2lkdGg6MTAwJX0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfY2FsZW5kYXIgdGQ+ZGl2e3BhZGRpbmctcmlnaHQ6NXB4fS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLnhkc29mdF9jYWxlbmRhciB0aHtoZWlnaHQ6MjVweH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfY2FsZW5kYXIgdGQsLnhkc29mdF9kYXRldGltZXBpY2tlciAueGRzb2Z0X2NhbGVuZGFyIHRoe3dpZHRoOjE0LjI4NTcxNDIlO2JhY2tncm91bmQ6I2Y1ZjVmNTtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Y29sb3I6IzY2Njtmb250LXNpemU6MTJweDt0ZXh0LWFsaWduOnJpZ2h0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtwYWRkaW5nOjA7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2N1cnNvcjpwb2ludGVyO2hlaWdodDoyNXB4fS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIueGRzb2Z0X3Nob3d3ZWVrcyAueGRzb2Z0X2NhbGVuZGFyIHRkLC54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIueGRzb2Z0X3Nob3d3ZWVrcyAueGRzb2Z0X2NhbGVuZGFyIHRoe3dpZHRoOjEyLjUlfS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLnhkc29mdF9jYWxlbmRhciB0aHtiYWNrZ3JvdW5kOiNmMWYxZjF9Lnhkc29mdF9kYXRldGltZXBpY2tlciAueGRzb2Z0X2NhbGVuZGFyIHRkLnhkc29mdF90b2RheXtjb2xvcjojM2FmfS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLnhkc29mdF9jYWxlbmRhciB0ZC54ZHNvZnRfaGlnaGxpZ2h0ZWRfZGVmYXVsdHtiYWNrZ3JvdW5kOiNmZmU5ZDI7LXdlYmtpdC1ib3gtc2hhZG93OiNmZmI4NzEgMCAxcHggNHB4IDAgaW5zZXQ7Ym94LXNoYWRvdzojZmZiODcxIDAgMXB4IDRweCAwIGluc2V0O2NvbG9yOiMwMDB9Lnhkc29mdF9kYXRldGltZXBpY2tlciAueGRzb2Z0X2NhbGVuZGFyIHRkLnhkc29mdF9oaWdobGlnaHRlZF9taW50e2JhY2tncm91bmQ6I2MxZmZjOTstd2Via2l0LWJveC1zaGFkb3c6IzAwZGQxYyAwIDFweCA0cHggMCBpbnNldDtib3gtc2hhZG93OiMwMGRkMWMgMCAxcHggNHB4IDAgaW5zZXQ7Y29sb3I6IzAwMH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfY2FsZW5kYXIgdGQueGRzb2Z0X2RlZmF1bHQsLnhkc29mdF9kYXRldGltZXBpY2tlciAueGRzb2Z0X2NhbGVuZGFyIHRkLnhkc29mdF9jdXJyZW50LC54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLnhkc29mdF90aW1lcGlja2VyIC54ZHNvZnRfdGltZV9ib3g+ZGl2PmRpdi54ZHNvZnRfY3VycmVudHtiYWNrZ3JvdW5kOiMzYWY7LXdlYmtpdC1ib3gtc2hhZG93OiMxNzhmZTUgMCAxcHggM3B4IDAgaW5zZXQ7Ym94LXNoYWRvdzojMTc4ZmU1IDAgMXB4IDNweCAwIGluc2V0O2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6NzAwfS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLnhkc29mdF9jYWxlbmRhciB0ZC54ZHNvZnRfb3RoZXJfbW9udGgsLnhkc29mdF9kYXRldGltZXBpY2tlciAueGRzb2Z0X2NhbGVuZGFyIHRkLnhkc29mdF9kaXNhYmxlZCwueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfdGltZV9ib3g+ZGl2PmRpdi54ZHNvZnRfZGlzYWJsZWR7b3BhY2l0eTouNTstbXMtZmlsdGVyOlwiYWxwaGEob3BhY2l0eT01MClcIjtjdXJzb3I6ZGVmYXVsdH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfY2FsZW5kYXIgdGQueGRzb2Z0X290aGVyX21vbnRoLnhkc29mdF9kaXNhYmxlZHtvcGFjaXR5Oi4yOy1tcy1maWx0ZXI6XCJhbHBoYShvcGFjaXR5PTIwKVwifS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLnhkc29mdF9jYWxlbmRhciB0ZDpob3ZlciwueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfdGltZXBpY2tlciAueGRzb2Z0X3RpbWVfYm94PmRpdj5kaXY6aG92ZXJ7Y29sb3I6I2ZmZiAhaW1wb3J0YW50O2JhY2tncm91bmQ6I2ZmODAwMCAhaW1wb3J0YW50Oy13ZWJraXQtYm94LXNoYWRvdzpub25lICFpbXBvcnRhbnQ7Ym94LXNoYWRvdzpub25lICFpbXBvcnRhbnR9Lnhkc29mdF9kYXRldGltZXBpY2tlciAueGRzb2Z0X2NhbGVuZGFyIHRkLnhkc29mdF9jdXJyZW50Lnhkc29mdF9kaXNhYmxlZDpob3ZlciwueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfdGltZXBpY2tlciAueGRzb2Z0X3RpbWVfYm94PmRpdj5kaXYueGRzb2Z0X2N1cnJlbnQueGRzb2Z0X2Rpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6IzNhZiAhaW1wb3J0YW50Oy13ZWJraXQtYm94LXNoYWRvdzojMTc4ZmU1IDAgMXB4IDNweCAwIGluc2V0ICFpbXBvcnRhbnQ7Ym94LXNoYWRvdzojMTc4ZmU1IDAgMXB4IDNweCAwIGluc2V0ICFpbXBvcnRhbnQ7Y29sb3I6I2ZmZiAhaW1wb3J0YW50fS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLnhkc29mdF9jYWxlbmRhciB0ZC54ZHNvZnRfZGlzYWJsZWQ6aG92ZXIsLnhkc29mdF9kYXRldGltZXBpY2tlciAueGRzb2Z0X3RpbWVwaWNrZXIgLnhkc29mdF90aW1lX2JveD5kaXY+ZGl2Lnhkc29mdF9kaXNhYmxlZDpob3Zlcntjb2xvcjppbmhlcml0ICFpbXBvcnRhbnQ7YmFja2dyb3VuZDppbmhlcml0ICFpbXBvcnRhbnQ7LXdlYmtpdC1ib3gtc2hhZG93OmluaGVyaXQgIWltcG9ydGFudDtib3gtc2hhZG93OmluaGVyaXQgIWltcG9ydGFudH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfY2FsZW5kYXIgdGh7Zm9udC13ZWlnaHQ6NzAwO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHR9Lnhkc29mdF9kYXRldGltZXBpY2tlciAueGRzb2Z0X2NvcHlyaWdodHtjb2xvcjojY2NjICFpbXBvcnRhbnQ7Zm9udC1zaXplOjEwcHg7Y2xlYXI6Ym90aDtmbG9hdDpub25lO21hcmdpbi1sZWZ0OjhweH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfY29weXJpZ2h0IGF7Y29sb3I6I2VlZSAhaW1wb3J0YW50fS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLnhkc29mdF9jb3B5cmlnaHQgYTpob3Zlcntjb2xvcjojYWFhICFpbXBvcnRhbnR9Lnhkc29mdF90aW1lX2JveHtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXI6MXB4IHNvbGlkICNjY2N9Lnhkc29mdF9zY3JvbGxiYXI+Lnhkc29mdF9zY3JvbGxlcntiYWNrZ3JvdW5kOiNjY2MgIWltcG9ydGFudDtoZWlnaHQ6MjBweDtib3JkZXItcmFkaXVzOjNweH0ueGRzb2Z0X3Njcm9sbGJhcntwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo3cHg7cmlnaHQ6MDt0b3A6MDtib3R0b206MDtjdXJzb3I6cG9pbnRlcn0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyLnhkc29mdF9ydGwgLnhkc29mdF9zY3JvbGxiYXJ7bGVmdDowO3JpZ2h0OmF1dG99Lnhkc29mdF9zY3JvbGxlcl9ib3h7cG9zaXRpb246cmVsYXRpdmV9Lnhkc29mdF9kYXRldGltZXBpY2tlci54ZHNvZnRfZGFya3std2Via2l0LWJveC1zaGFkb3c6MCA1cHggMTVweCAtNXB4IHJnYmEoMjU1LDI1NSwyNTUsMC41MDYpO2JveC1zaGFkb3c6MCA1cHggMTVweCAtNXB4IHJnYmEoMjU1LDI1NSwyNTUsMC41MDYpO2JhY2tncm91bmQ6IzAwMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNDQ0O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjMzMzO2JvcmRlci1yaWdodDoxcHggc29saWQgIzMzMztib3JkZXItdG9wOjFweCBzb2xpZCAjMzMzO2NvbG9yOiNjY2N9Lnhkc29mdF9kYXRldGltZXBpY2tlci54ZHNvZnRfZGFyayAueGRzb2Z0X3RpbWVwaWNrZXIgLnhkc29mdF90aW1lX2JveHtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMjIyfS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIueGRzb2Z0X2RhcmsgLnhkc29mdF90aW1lcGlja2VyIC54ZHNvZnRfdGltZV9ib3g+ZGl2PmRpdntiYWNrZ3JvdW5kOiMwYTBhMGE7Ym9yZGVyLXRvcDoxcHggc29saWQgIzIyMjtjb2xvcjojOTk5fS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIueGRzb2Z0X2RhcmsgLnhkc29mdF9sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lnhkc29mdF9kYXRldGltZXBpY2tlci54ZHNvZnRfZGFyayAueGRzb2Z0X2xhYmVsPi54ZHNvZnRfc2VsZWN0e2JvcmRlcjoxcHggc29saWQgIzMzMztiYWNrZ3JvdW5kOiMwMDB9Lnhkc29mdF9kYXRldGltZXBpY2tlci54ZHNvZnRfZGFyayAueGRzb2Z0X2xhYmVsPi54ZHNvZnRfc2VsZWN0PmRpdj4ueGRzb2Z0X29wdGlvbjpob3Zlcntjb2xvcjojMDAwO2JhY2tncm91bmQ6IzAwN2ZmZn0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyLnhkc29mdF9kYXJrIC54ZHNvZnRfbGFiZWw+Lnhkc29mdF9zZWxlY3Q+ZGl2Pi54ZHNvZnRfb3B0aW9uLnhkc29mdF9jdXJyZW50e2JhY2tncm91bmQ6I2M1MDstd2Via2l0LWJveC1zaGFkb3c6I2IwM2UwMCAwIDFweCAzcHggMCBpbnNldDtib3gtc2hhZG93OiNiMDNlMDAgMCAxcHggM3B4IDAgaW5zZXQ7Y29sb3I6IzAwMH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyLnhkc29mdF9kYXJrIC54ZHNvZnRfbGFiZWwgaSwueGRzb2Z0X2RhdGV0aW1lcGlja2VyLnhkc29mdF9kYXJrIC54ZHNvZnRfcHJldiwueGRzb2Z0X2RhdGV0aW1lcGlja2VyLnhkc29mdF9kYXJrIC54ZHNvZnRfbmV4dCwueGRzb2Z0X2RhdGV0aW1lcGlja2VyLnhkc29mdF9kYXJrIC54ZHNvZnRfdG9kYXlfYnV0dG9ue2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBR1FBQUFBZUNBWUFBQURhVzd2ekFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeUpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNeTFqTURFeElEWTJMakUwTlRZMk1Td2dNakF4TWk4d01pOHdOaTB4TkRvMU5qb3lOeUFnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTmlBb1YybHVaRzkzY3lraUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlFVRXhRVVV6T1RBME0wVXlNVEZGTkRsQk0wRkZRVEpFTlRFeFJEVkJPRFlpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UVVFeFFVVXpPVEUwTTBVeU1URkZORGxCTTBGRlFUSkVOVEV4UkRWQk9EWWlQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBCUVRGQlJUTTRSVFF6UlRJeE1VVTBPVUV6UVVWQk1rUTFNVEZFTlVFNE5pSWdjM1JTWldZNlpHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcEJRVEZCUlRNNFJqUXpSVEl4TVVVME9VRXpRVVZCTWtRMU1URkVOVUU0TmlJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1BwMFZ4R0VBQUFJQVNVUkJWSGphN0pyTlNnTXhFTWVidGdoKzNNU0xyMVQxWG4yQ0hvU0tCMDgrUW1SOEJ4OUE4ZTdSaXhkQjlDS0NvTmRleEl1Z3hGbEphN3JOWm5lVGJMSXBNL0NuTkxzZE12TmpNOGwwbVJDaVE5WWU2MUlLQ0FnWkFVbkgrbVUzTU1aYUhZQ2hCbkpVRHpXT0ZaZFZmYzUrWkZMYnJXRGVYUHdieElxckxMZmFlUzBoRUJWR0lSUUNFaVpvSFF3dGxHU0J5Q0NkWUJsOGc4ZWdUVEFXb0tRTVJCUkJjWnhZbGh6aEtlZ3FNT2FnZUVyc0NIVmtrM2hYSUZvb0RnSEIxS2tISUhWZ3pLQjRBREpRL0ExakFGbUFZaGtRcUE1VE9CdG9jcktyZ1h3UUE4Z2NGSXVBSU84c1FTQTdoaWR2UHdhUUdaU2FBWUhPVVdKQUJoV1d3MkVNSUg5UWFnUUVSVTRTQXJKWG8wWlpMMTh1dmF4ZWpYdC9FbTh4alZCWG12RnIxS1ZtL0FKMTB0UmUyWG5yYU5xYUp2S0UzS0h1VWJmSzFFK1ZIQjBxNDAveTNzZFFTeFk0RkhXZUtKQ3VuUDhVeURkcUpaZW5UM250VlY1aklZQ0FoMjB2VDdpb1A4dHBmNkUybGZFTXdFUmUrd2hWMU1IandaQjdQQmlDeGNHUVd3S1pLRDYybGZHTm5QLzFwb0ZBQTYwVDdyRjFVZ2NLZDJpZDNLRGVVUytvTFdWOERmV0FlcE9mcTAwQ2dRYWJpOXpqY2dKVllWRDdQVnpRVUFVR0FRa2JOSlRCSUNEaGd3WVRqRFlENlhlVzA4WktoK0E0cFlremVuT3hYVWJ2WmNXejdFOHlrUk1uSUhHWDFYUGwrMW0ydlBZcEwrMnFkYjhDREFBUmxLRkV6L1pWa0FBQUFBQkpSVTVFcmtKZ2dnPT0pfS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIueGRzb2Z0X2RhcmsgLnhkc29mdF9jYWxlbmRhciB0ZCwueGRzb2Z0X2RhdGV0aW1lcGlja2VyLnhkc29mdF9kYXJrIC54ZHNvZnRfY2FsZW5kYXIgdGh7YmFja2dyb3VuZDojMGEwYTBhO2JvcmRlcjoxcHggc29saWQgIzIyMjtjb2xvcjojOTk5fS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIueGRzb2Z0X2RhcmsgLnhkc29mdF9jYWxlbmRhciB0aHtiYWNrZ3JvdW5kOiMwZTBlMGV9Lnhkc29mdF9kYXRldGltZXBpY2tlci54ZHNvZnRfZGFyayAueGRzb2Z0X2NhbGVuZGFyIHRkLnhkc29mdF90b2RheXtjb2xvcjojYzUwfS54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIueGRzb2Z0X2RhcmsgLnhkc29mdF9jYWxlbmRhciB0ZC54ZHNvZnRfaGlnaGxpZ2h0ZWRfZGVmYXVsdHtiYWNrZ3JvdW5kOiNmZmU5ZDI7LXdlYmtpdC1ib3gtc2hhZG93OiNmZmI4NzEgMCAxcHggNHB4IDAgaW5zZXQ7Ym94LXNoYWRvdzojZmZiODcxIDAgMXB4IDRweCAwIGluc2V0O2NvbG9yOiMwMDB9Lnhkc29mdF9kYXRldGltZXBpY2tlci54ZHNvZnRfZGFyayAueGRzb2Z0X2NhbGVuZGFyIHRkLnhkc29mdF9oaWdobGlnaHRlZF9taW50e2JhY2tncm91bmQ6I2MxZmZjOTstd2Via2l0LWJveC1zaGFkb3c6IzAwZGQxYyAwIDFweCA0cHggMCBpbnNldDtib3gtc2hhZG93OiMwMGRkMWMgMCAxcHggNHB4IDAgaW5zZXQ7Y29sb3I6IzAwMH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyLnhkc29mdF9kYXJrIC54ZHNvZnRfY2FsZW5kYXIgdGQueGRzb2Z0X2RlZmF1bHQsLnhkc29mdF9kYXRldGltZXBpY2tlci54ZHNvZnRfZGFyayAueGRzb2Z0X2NhbGVuZGFyIHRkLnhkc29mdF9jdXJyZW50LC54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIueGRzb2Z0X2RhcmsgLnhkc29mdF90aW1lcGlja2VyIC54ZHNvZnRfdGltZV9ib3g+ZGl2PmRpdi54ZHNvZnRfY3VycmVudHtiYWNrZ3JvdW5kOiNjNTA7LXdlYmtpdC1ib3gtc2hhZG93OiNiMDNlMDAgMCAxcHggM3B4IDAgaW5zZXQ7Ym94LXNoYWRvdzojYjAzZTAwIDAgMXB4IDNweCAwIGluc2V0O2NvbG9yOiMwMDB9Lnhkc29mdF9kYXRldGltZXBpY2tlci54ZHNvZnRfZGFyayAueGRzb2Z0X2NhbGVuZGFyIHRkOmhvdmVyLC54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIueGRzb2Z0X2RhcmsgLnhkc29mdF90aW1lcGlja2VyIC54ZHNvZnRfdGltZV9ib3g+ZGl2PmRpdjpob3Zlcntjb2xvcjojMDAwICFpbXBvcnRhbnQ7YmFja2dyb3VuZDojMDA3ZmZmICFpbXBvcnRhbnR9Lnhkc29mdF9kYXRldGltZXBpY2tlci54ZHNvZnRfZGFyayAueGRzb2Z0X2NhbGVuZGFyIHRoe2NvbG9yOiM2NjZ9Lnhkc29mdF9kYXRldGltZXBpY2tlci54ZHNvZnRfZGFyayAueGRzb2Z0X2NvcHlyaWdodHtjb2xvcjojMzMzICFpbXBvcnRhbnR9Lnhkc29mdF9kYXRldGltZXBpY2tlci54ZHNvZnRfZGFyayAueGRzb2Z0X2NvcHlyaWdodCBhe2NvbG9yOiMxMTEgIWltcG9ydGFudH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyLnhkc29mdF9kYXJrIC54ZHNvZnRfY29weXJpZ2h0IGE6aG92ZXJ7Y29sb3I6IzU1NSAhaW1wb3J0YW50fS54ZHNvZnRfZGFyayAueGRzb2Z0X3RpbWVfYm94e2JvcmRlcjoxcHggc29saWQgIzMzM30ueGRzb2Z0X2RhcmsgLnhkc29mdF9zY3JvbGxiYXI+Lnhkc29mdF9zY3JvbGxlcntiYWNrZ3JvdW5kOiMzMzMgIWltcG9ydGFudH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC54ZHNvZnRfc2F2ZV9zZWxlY3RlZHtkaXNwbGF5OmJsb2NrO2JvcmRlcjoxcHggc29saWQgI2RkZCAhaW1wb3J0YW50O21hcmdpbi10b3A6NXB4O3dpZHRoOjEwMCU7Y29sb3I6IzQ1NDU1MTtmb250LXNpemU6MTNweH0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC5ibHVlLWdyYWRpZW50LWJ1dHRvbntmb250LWZhbWlseTpcIm11c2VvLXNhbnNcIixcIkJvb2sgQW50aXF1YVwiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6MzAwO2NvbG9yOiM4Mjg3OGM7aGVpZ2h0OjI4cHg7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzo0cHggMTdweCA0cHggMzNweDtib3JkZXI6MXB4IHNvbGlkICNkN2Q4ZGE7YmFja2dyb3VuZDotd2Via2l0LWdyYWRpZW50KGxpbmVhcixsZWZ0IHRvcCwgbGVmdCBib3R0b20sY29sb3Itc3RvcCgwLCAjZmZmKSxjb2xvci1zdG9wKDczJSwgI2Y0ZjhmYSkpO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZmZmIDAsI2Y0ZjhmYSA3MyUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZicsZW5kQ29sb3JzdHI9JyNmNGY4ZmEnLEdyYWRpZW50VHlwZT0wKX0ueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC5ibHVlLWdyYWRpZW50LWJ1dHRvbjpob3ZlciwueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC5ibHVlLWdyYWRpZW50LWJ1dHRvbjpmb2N1cywueGRzb2Z0X2RhdGV0aW1lcGlja2VyIC5ibHVlLWdyYWRpZW50LWJ1dHRvbjpob3ZlciBzcGFuLC54ZHNvZnRfZGF0ZXRpbWVwaWNrZXIgLmJsdWUtZ3JhZGllbnQtYnV0dG9uOmZvY3VzIHNwYW57Y29sb3I6IzQ1NDU1MTtiYWNrZ3JvdW5kOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSxjb2xvci1zdG9wKDAsICNmNGY4ZmEpLGNvbG9yLXN0b3AoNzMlLCAjRkZGKSk7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmNGY4ZmEgMCwjRkZGIDczJSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZjRmOGZhJyxlbmRDb2xvcnN0cj0nI0ZGRicsR3JhZGllbnRUeXBlPTApfVxuIiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5kYXRlLXRpbWUtcGlja2VyX19jb250ZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmRhdGUtdGltZS1waWNrZXJfX2ZpZWxkIHtcbiAgcGFkZGluZy1yaWdodDogMi42NjY2NjY2NjY3cmVtO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cbi5kYXRlLXRpbWUtcGlja2VyX19pY29uIHtcbiAgZmlsbDogI2QwZDBkMDtcbiAgd2lkdGg6IDEuMzMzMzMzMzMzM3JlbTtcbiAgaGVpZ2h0OiAxLjMzMzMzMzMzMzNyZW07XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwLjkzMzMzMzMzMzNyZW07XG4gIHJpZ2h0OiAwLjhyZW07XG59XG4uZGF0ZS10aW1lLXBpY2tlci0td2l0aC1pY29uIC5pbnB1dCB7XG4gIHBhZGRpbmctcmlnaHQ6IDIuNjY2NjY2NjY2N3JlbTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmljb24tdG9vbHRpcCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmljb24tdG9vbHRpcF9fdG9vbHRpcCB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMTExLCAxMTEsIDExMSwgMC44KTtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGZvbnQ6IDUwMCAwLjY2NjY2NjY2NjdyZW0gXCJMYXRvXCIsIHNhbnMtc2VyaWY7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHBhZGRpbmc6IDAuNDY2NjY2NjY2N3JlbSAwLjkzMzMzMzMzMzNyZW07XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNTAlO1xuICBib3R0b206IGNhbGMoMTAwJSArIDAuNjY2NjY2NjY2N3JlbSk7XG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIGNlbnRlcjtcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gY2VudGVyO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSBzY2FsZSgwKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgc2NhbGUoMCk7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyBlYXNlLWluLW91dCwgLXdlYmtpdC10cmFuc2Zvcm0gMjUwbXMgZWFzZS1pbi1vdXQ7XG59XG4uaWNvbi10b29sdGlwX190b29sdGlwOjpiZWZvcmUge1xuICBjb250ZW50OiBcIlwiO1xuICBib3JkZXItdG9wOiBzb2xpZCAwLjJyZW0gcmdiYSgxMTEsIDExMSwgMTExLCAwLjgpO1xuICBib3JkZXItbGVmdDogc29saWQgMC4ycmVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGJvcmRlci1yaWdodDogc29saWQgMC4ycmVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAxMDAlO1xuICBsZWZ0OiBjYWxjKDUwJSAtIDAuMnJlbSk7XG59XG4uaWNvbi10b29sdGlwOmhvdmVyIC5pY29uLXRvb2x0aXBfX3Rvb2x0aXAge1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSBzY2FsZSgxKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgc2NhbGUoMSk7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5uYXZpZ2F0aW9uLWZvb3Rlci1pdGVtIHtcbiAgYm9yZGVyLXRvcDogc29saWQgMXB4ICNkMGQwZDA7XG4gIGNvbG9yOiAjZmZmO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAubmF2aWdhdGlvbi1mb290ZXItaXRlbSB7XG4gICAgcGFkZGluZzogMXJlbSAwIDAuNjY2NjY2NjY2N3JlbSAxcmVtO1xuICB9XG59XG5AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpLCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSkgYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZpZ2F0aW9uLWZvb3Rlci1pdGVtIHtcbiAgICBwYWRkaW5nOiAxcmVtIDAgMC42NjY2NjY2NjY3cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZpZ2F0aW9uLWZvb3Rlci1pdGVtIHtcbiAgICBib3JkZXItdG9wOiBub25lO1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAyNSU7XG4gICAgICAgIGZsZXgtYmFzaXM6IDI1JTtcbiAgfVxufVxuLm5hdmlnYXRpb24tZm9vdGVyLWl0ZW0tLXNvY2lhbCB7XG4gIGJvcmRlci10b3A6IG5vbmU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZpZ2F0aW9uLWZvb3Rlci1pdGVtLS1pcy1jYXJlZXIge1xuICAgIHBhZGRpbmctdG9wOiAwLjI1cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZpZ2F0aW9uLWZvb3Rlci1pdGVtLS1pcy1jYXJlZXIgLnRpdGxlIHtcbiAgICBsaW5lLWhlaWdodDogMS4xO1xuICAgIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XG4gIH1cbn1cbi5uYXZpZ2F0aW9uLWZvb3Rlci1pdGVtLS1icmFuZCB7XG4gIGJvcmRlcjogbm9uZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5hdmlnYXRpb24tZm9vdGVyLWl0ZW0tLWJyYW5kIHtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5uYXZpZ2F0aW9uLXNpZGViYXIge1xuICAgIG1hcmdpbi1yaWdodDogMXJlbTtcbiAgfVxufVxuLm5hdmlnYXRpb24tc2lkZWJhci0tYWNjb3VudCB7XG4gIGJvcmRlcjogMDtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xufVxuLm5hdmlnYXRpb24tc2lkZWJhcl9fbGlzdCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHBhZGRpbmc6IDFyZW07XG4gIGJvcmRlci1yYWRpdXM6IDAuMTMzMzMzMzMzM3JlbTtcbn1cbi5uYXZpZ2F0aW9uLXNpZGViYXJfX2xpc3QtLWFjY291bnQge1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXItcmFkaXVzOiAwO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ubmF2aWdhdGlvbi1zaWRlYmFyLWl0ZW0ge1xuICBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2VjZWNlYztcbn1cbi5uYXZpZ2F0aW9uLXNpZGViYXItaXRlbTpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLXdpZHRoOiAwO1xufVxuLm5hdmlnYXRpb24tc2lkZWJhci1pdGVtX19saW5rIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAwLjYzcmVtIDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjNlbTtcbn1cbi5uYXZpZ2F0aW9uLXNpZGViYXItaXRlbV9fbGluay0tYWNjb3VudCB7XG4gIG1hcmdpbjogMCAtMS4zMzMzMzMzMzMzcmVtO1xuICBwYWRkaW5nOiAwIDAgMCAxLjI2NjY2NjY2NjdyZW07XG4gIGNvbG9yOiAjNmY2ZjZmO1xufVxuLm5hdmlnYXRpb24tc2lkZWJhci1pdGVtX19saW5rLS1hY3RpdmUge1xuICBmb250LXdlaWdodDogNzAwO1xufVxuLm5hdmlnYXRpb24tc2lkZWJhci1pdGVtX19pY29uLXdyYXBwZXIge1xuICBwYWRkaW5nOiAwIDFyZW0gMCAwO1xuICBtaW4td2lkdGg6IDMuMzMzMzMzMzMzM3JlbTtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG4ubmF2aWdhdGlvbi1zaWRlYmFyLWl0ZW1fX2ljb24td3JhcHBlci0tYWNjb3VudCB7XG4gIG1pbi13aWR0aDogM3JlbTtcbiAgY29sb3I6ICNkMGQwZDA7XG59XG4ubmF2aWdhdGlvbi1zaWRlYmFyLWl0ZW1fX2xhYmVsIHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cbi5uYXZpZ2F0aW9uLXNpZGViYXItaXRlbV9fbGFiZWwtLWFjY291bnQge1xuICBwYWRkaW5nOiAxcmVtIDAuODY2NjY2NjY2N3JlbSAxcmVtIDAuNjY2NjY2NjY2N3JlbTtcbiAgYm9yZGVyLWJvdHRvbTogMC4wNjY2NjY2NjY3cmVtIHNvbGlkICNlY2VjZWM7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcbiAgICAgICAgICBmbGV4LWdyb3c6IDE7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5ub2RlLWFuaW1hdG9yX19pbWFnZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogNTAwO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnByaWNlLW1vZGUge1xuICBjb2xvcjogI2QwZDBkMDtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDEzMzMzMzMzM3JlbTtcbn1cbi5wcmljZS1tb2RlLS1zbWFsbCB7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xuICBsZXR0ZXItc3BhY2luZzogMC4wMDY2NjY2NjY3cmVtO1xufVxuLnByaWNlLW1vZGUtLXNlY29uZGFyeSB7XG4gIGNvbG9yOiAjOTI5MjkyO1xufVxuLnByaWNlLW1vZGUtLW1vYmlsZS1zbWFsbCB7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJpY2UtbW9kZS0tbW9iaWxlLXNtYWxsIHtcbiAgICBmb250LXNpemU6IDEuMDY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLnByaWNlLW1vZGVfX2ljb24ge1xuICBtYXJnaW4tcmlnaHQ6IDAuNTMzMzMzMzMzM3JlbTtcbn1cbi5wcmljZS1tb2RlX19pY29uLS1zbWFsbCB7XG4gIG1hcmdpbi1yaWdodDogMC4yNjY2NjY2NjY3cmVtO1xufVxuLnByaWNlLW1vZGVfX2ljb24tLW1vYmlsZS1zbWFsbCB7XG4gIG1hcmdpbi1yaWdodDogMC4yNjY2NjY2NjY3cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJpY2UtbW9kZV9faWNvbi0tbW9iaWxlLXNtYWxsIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDAuNTMzMzMzMzMzM3JlbTtcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucHJvZHVjdC1jYXJkLWl0ZW0ge1xuICBib3JkZXI6IDAuMTMzMzMzMzMzM3JlbSBzb2xpZCAjMWExNzFiO1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBwYWRkaW5nOiAwLjhyZW07XG4gIG1hcmdpbi1ib3R0b206IDAuNjY2NjY2NjY2N3JlbTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnByb2R1Y3QtY2FyZC1pdGVtIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxLjQ2NjY2NjY2NjdyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtY2FyZC1pdGVtIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IDEuMzMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLnByb2R1Y3QtY2FyZC1pdGVtX19jb2wtLWltYWdlIHtcbiAgYm9yZGVyLXJhZGl1czogMTBweCAwIDAgMTBweDtcbiAgcGFkZGluZy10b3A6IDA7XG4gIHBhZGRpbmctYm90dG9tOiAwO1xuICB3aWR0aDogNS4ycmVtO1xuICBtaW4td2lkdGg6IDUuMnJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnByb2R1Y3QtY2FyZC1pdGVtX19jb2wtLWltYWdlIHtcbiAgICB3aWR0aDogMjIlO1xuICAgIG1pbi13aWR0aDogMjIlO1xuICB9XG59XG4ucHJvZHVjdC1jYXJkLWl0ZW1fX2NvbC0tdG90YWwge1xuICBwYWRkaW5nLXRvcDogMDtcbiAgcGFkZGluZy1ib3R0b206IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4td2lkdGg6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNhcmQtaXRlbV9fY29sLS10b3RhbCB7XG4gICAgd2lkdGg6IDQwJTtcbiAgICBtaW4td2lkdGg6IDQwJTtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1jYXJkLWl0ZW0gLnByb2R1Y3QtY2FyZC1pdGVtX19jb2wtLXRvdGFsIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgcGFkZGluZy1yaWdodDogY2FsYygzMHB4ICsgMTVweCk7XG4gIH1cbn1cbi5wcm9kdWN0LWNhcmQtaXRlbV9fY29sLS1jb250ZW50IHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi13aWR0aDogMTAwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtY2FyZC1pdGVtX19jb2wtLWNvbnRlbnQge1xuICAgIHdpZHRoOiA2MCU7XG4gICAgbWluLXdpZHRoOiA2MCU7XG4gIH1cbn1cbi5wcm9kdWN0LWNhcmQtaXRlbV9fY29sLS1kZXNjcmlwdGlvbiB7XG4gIHBhZGRpbmctdG9wOiAwLjUzMzMzMzMzMzNyZW07XG4gIHBhZGRpbmctYm90dG9tOiAwLjhyZW07XG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA1LjJyZW0pO1xuICBtaW4td2lkdGg6IGNhbGMoMTAwJSAtIDUuMnJlbSk7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5wcm9kdWN0LWNhcmQtaXRlbV9fY29sLS1kZXNjcmlwdGlvbiB7XG4gICAgd2lkdGg6IDc4JTtcbiAgICBtaW4td2lkdGg6IDc4JTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1jYXJkLWl0ZW1fX2NvbC0tZGVzY3JpcHRpb24ge1xuICAgIHBhZGRpbmctdG9wOiAyLjRyZW07XG4gICAgcGFkZGluZy1ib3R0b206IDEuODY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLnByb2R1Y3QtY2FyZC1pdGVtX19jb2wtLXNob3BwaW5nLWxpc3Q6bm90KC5wcm9kdWN0LWNhcmQtaXRlbV9fY29sLS1pbWFnZSkge1xuICBwYWRkaW5nLWJvdHRvbTogMS4zMzMzMzMzMzMzcmVtO1xuICBwYWRkaW5nLXRvcDogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtY2FyZC1pdGVtX19jb2wtLXNob3BwaW5nLWxpc3Q6bm90KC5wcm9kdWN0LWNhcmQtaXRlbV9fY29sLS1pbWFnZSkge1xuICAgIHBhZGRpbmctYm90dG9tOiAxLjg2NjY2NjY2NjdyZW07XG4gICAgcGFkZGluZy10b3A6IDEuODY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLnByb2R1Y3QtY2FyZC1pdGVtX19jb2wtLXNob3BwaW5nLWxpc3Q6bm90KC5wcm9kdWN0LWNhcmQtaXRlbV9fY29sLS1pbWFnZSk6bGFzdC1jaGlsZCB7XG4gIHBhZGRpbmctYm90dG9tOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1jYXJkLWl0ZW1fX2NvbC0tc2hvcHBpbmctbGlzdDpub3QoLnByb2R1Y3QtY2FyZC1pdGVtX19jb2wtLWltYWdlKTpsYXN0LWNoaWxkIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMS4zMzMzMzMzMzMzcmVtO1xuICB9XG59XG4ucHJvZHVjdC1jYXJkLWl0ZW1fX2NvbC0taGlkZGVuOm5vdCgucHJvZHVjdC1jYXJkLWl0ZW1fX2NvbC0tY29udGVudCkge1xuICBvcGFjaXR5OiAwLjU7XG59XG4ucHJvZHVjdC1jYXJkLWl0ZW1fX2FkZGl0aW9uYWwtdGl0bGUge1xuICBwYWRkaW5nLXRvcDogMS4wNjY2NjY2NjY3cmVtO1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtY2FyZC1pdGVtX19hZGRpdGlvbmFsLXRpdGxlIHtcbiAgICBwYWRkaW5nLXRvcDogMS44NjY2NjY2NjY3cmVtO1xuICB9XG59XG4ucHJvZHVjdC1jYXJkLWl0ZW1fX2lubmVyLS1mdWxsLWhlaWdodCB7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5wcm9kdWN0LWNhcmQtaXRlbV9faW5uZXItLXRvdGFsIHtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiByZXZlcnNlO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNhcmQtaXRlbV9faW5uZXItLXRvdGFsIHtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgLXdlYmtpdC1ib3gtYWxpZ246IGVuZDtcbiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGVuZDtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgfVxufVxuLnByb2R1Y3QtY2FyZC1pdGVtX19pbm5lci0tYWN0aW9ucyB7XG4gIHBhZGRpbmctYm90dG9tOiAwLjRyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNhcmQtaXRlbV9faW5uZXItLWFjdGlvbnMge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgIC13ZWJraXQtYm94LWFsaWduOiBlbmQ7XG4gICAgICAgIC1tcy1mbGV4LWFsaWduOiBlbmQ7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gIH1cbn1cbi5wcm9kdWN0LWNhcmQtaXRlbV9fdGl0bGUge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgY29sb3I6ICM2ZjZmNmY7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNhcmQtaXRlbV9fdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMS4zMzMzMzMzMzMzcmVtO1xuICB9XG59XG4ucHJvZHVjdC1jYXJkLWl0ZW1fX3RpdGxlLS1zaG9wcGluZy1saXN0LWFsdGVybmF0aXZlIHtcbiAgZm9udC1zaXplOiAwLjhyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNhcmQtaXRlbV9fdGl0bGUtLXNob3BwaW5nLWxpc3QtYWx0ZXJuYXRpdmUge1xuICAgIGZvbnQtc2l6ZTogMS4wNjY2NjY2NjY3cmVtO1xuICB9XG59XG4ucHJvZHVjdC1jYXJkLWl0ZW1fX3RpdGxlLS1oaWRkZW4ge1xuICBvcGFjaXR5OiAwLjU7XG59XG4ucHJvZHVjdC1jYXJkLWl0ZW1fX2NvbG9yIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMC45MzMzMzMzMzMzcmVtO1xuICBoZWlnaHQ6IDAuOTMzMzMzMzMzM3JlbTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBtYXJnaW4tbGVmdDogMC4yNjY2NjY2NjY3cmVtO1xuICB0ZXh0LWluZGVudDogLTY2Ni42cmVtO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLnByb2R1Y3QtY2FyZC1pdGVtX19jb2xvci1wcmV2aWV3IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZvbnQtc2l6ZTogMC44NjY2NjY2NjY3cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogIzZmNmY2ZjtcbiAgcGFkZGluZy1yaWdodDogMS40cmVtO1xuICBsaW5lLWhlaWdodDogMS40cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1jYXJkLWl0ZW1fX2NvbG9yLXByZXZpZXcge1xuICAgIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICB9XG59XG4ucHJvZHVjdC1jYXJkLWl0ZW1fX2NvbG9yLXByZXZpZXctZGVjb3JhdGlvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDA7XG4gIHRvcDogMC4ycmVtO1xuICB3aWR0aDogMXJlbTtcbiAgaGVpZ2h0OiAxcmVtO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGJvcmRlcjogMC4wNjY2NjY2NjY3cmVtIHNvbGlkICNlY2VjZWM7XG59XG4ucHJvZHVjdC1jYXJkLWl0ZW1fX2F2YWlsYWJsZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIG1hcmdpbi1ib3R0b206IDAuNTMzMzMzMzMzM3JlbTtcbn1cbi5wcm9kdWN0LWNhcmQtaXRlbV9fY2hlY2tib3gge1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ucHJvZHVjdC1jYXJkLWl0ZW1fX2NoZWNrYm94LWNvbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjYsIDIzLCAyNywgMC4wNSk7XG4gIHBhZGRpbmctbGVmdDogMC44cmVtO1xufVxuLnByb2R1Y3QtY2FyZC1pdGVtX19jaGVja2JveC1jb2wtLXNob3BwaW5nLWxpc3Qge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwO1xuICB0b3A6IDA7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNhcmQtaXRlbV9fY2hlY2tib3gtY29sLS1zaG9wcGluZy1saXN0IHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNiwgMjMsIDI3LCAwLjA1KTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMS4zMzMzMzMzMzMzcmVtO1xuICB9XG59XG4ucHJvZHVjdC1jYXJkLWl0ZW1fX3F1YW50aXR5LWhvbGRlciB7XG4gIHBhZGRpbmctYm90dG9tOiAxLjA2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNhcmQtaXRlbV9fcXVhbnRpdHktaG9sZGVyIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgfVxufVxuLnByb2R1Y3QtY2FyZC1pdGVtX19xdWFudGl0eSB7XG4gIGZvbnQtc2l6ZTogMC44NjY2NjY2NjY3cmVtO1xuICBjb2xvcjogIzkyOTI5Mjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtY2FyZC1pdGVtX19xdWFudGl0eSB7XG4gICAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIH1cbn1cbi5wcm9kdWN0LWNhcmQtaXRlbV9fcXVhbnRpdHktdGl0bGUge1xuICBjb2xvcjogIzZmNmY2ZjtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5wcm9kdWN0LWNhcmQtaXRlbV9fZGVsZXRlLWNhcnQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMy4ycmVtO1xuICByaWdodDogMi4xMzMzMzMzMzMzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1jYXJkLWl0ZW1fX2RlbGV0ZS1jYXJ0IHtcbiAgICBwYWRkaW5nLXRvcDogMi4xMzMzMzMzMzMzcmVtO1xuICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gIH1cbn1cbi5wcm9kdWN0LWNhcmQtaXRlbV9fcmVtb3ZlLWJ1dHRvbiB7XG4gIG1hcmdpbi10b3A6IC0zLjJyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNhcmQtaXRlbV9fcmVtb3ZlLWJ1dHRvbiB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG4ucHJvZHVjdC1jYXJkLWl0ZW1fX3JlbW92ZS1idXR0b24tdGV4dCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNhcmQtaXRlbV9fcmVtb3ZlLWJ1dHRvbi10ZXh0IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIH1cbn1cbi5wcm9kdWN0LWNhcmQtaXRlbV9fZHJvcGRvd24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IC0wLjEzMzMzMzMzMzNyZW07XG4gIHdpZHRoOiBjYWxjKDEwMCUgKyAwLjI2NjY2NjY2NjdyZW0pO1xuICB0b3A6IGNhbGMoMTAwJSArIDFyZW0pO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1jYXJkLWl0ZW1fX2Ryb3Bkb3duIHtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGxlZnQ6IGF1dG87XG4gICAgdG9wOiBhdXRvO1xuICB9XG59XG4ucHJvZHVjdC1jYXJkLWl0ZW1fX2Ryb3Bkb3duIC5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQsXG4ucHJvZHVjdC1jYXJkLWl0ZW1fX2Ryb3Bkb3duIC5jdXN0b20tc2VsZWN0X19zZWxlY3Qge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1jYXJkLWl0ZW1fX2Ryb3Bkb3duIC5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQsXG4gIC5wcm9kdWN0LWNhcmQtaXRlbV9fZHJvcGRvd24gLmN1c3RvbS1zZWxlY3RfX3NlbGVjdCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzFhMTcxYjtcbiAgfVxufVxuLnByb2R1Y3QtY2FyZC1pdGVtLS1zaG9wcGluZy1saXN0LWF2YWlsYWJsZSB7XG4gIHBhZGRpbmctYm90dG9tOiA1cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1jYXJkLWl0ZW0tLXNob3BwaW5nLWxpc3QtYXZhaWxhYmxlIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgfVxufVxuLnByb2R1Y3QtY2FyZC1pdGVtLS1jaGVja291dCB7XG4gIG1hcmdpbi1ib3R0b206IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNhcmQtaXRlbS0tY2hlY2tvdXQgLnByb2R1Y3QtY2FyZC1pdGVtX19jb2wtLWltYWdlIHtcbiAgICB3aWR0aDogMTclO1xuICAgIG1pbi13aWR0aDogMTclO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNhcmQtaXRlbS0tY2hlY2tvdXQgLnByb2R1Y3QtY2FyZC1pdGVtX19jb2wtLXRvdGFsIHtcbiAgICB3aWR0aDogMjAlO1xuICAgIG1pbi13aWR0aDogMjAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNhcmQtaXRlbSAucHJvZHVjdC1jYXJkLWl0ZW0tLWNoZWNrb3V0IC5wcm9kdWN0LWNhcmQtaXRlbV9fY29sLS10b3RhbCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtY2FyZC1pdGVtLS1jaGVja291dCAucHJvZHVjdC1jYXJkLWl0ZW1fX2NvbC0tY29udGVudCB7XG4gICAgd2lkdGg6IDgwJTtcbiAgICBtaW4td2lkdGg6IDgwJTtcbiAgfVxufVxuLnByb2R1Y3QtY2FyZC1pdGVtLS1jaGVja291dCAucHJvZHVjdC1jYXJkLWl0ZW1fX2NvbC0tZGVzY3JpcHRpb24ge1xuICBwYWRkaW5nLXRvcDogMDtcbiAgcGFkZGluZy1ib3R0b206IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNhcmQtaXRlbS0tY2hlY2tvdXQgLnByb2R1Y3QtY2FyZC1pdGVtX19jb2wtLWRlc2NyaXB0aW9uIHtcbiAgICB3aWR0aDogODMlO1xuICAgIG1pbi13aWR0aDogODMlO1xuICAgIHBhZGRpbmctdG9wOiAxLjMzMzMzMzMzMzNyZW07XG4gICAgcGFkZGluZy1ib3R0b206IDFyZW07XG4gICAgbWFyZ2luLWxlZnQ6IC0wLjY2NjY2NjY2NjdyZW07XG4gIH1cbn1cbi5wcm9kdWN0LWNhcmQtaXRlbS0tY2hlY2tvdXQtYWRkcmVzcyB7XG4gIG1hcmdpbi1ib3R0b206IDYuNjY2NjY2NjY2N3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtY2FyZC1pdGVtLS1jaGVja291dC1hZGRyZXNzIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjMzMzMzMzMzMzNyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtY2FyZC1pdGVtLS1jaGVja291dC1hZGRyZXNzIC5wcm9kdWN0LWNhcmQtaXRlbV9fY29sLS10b3RhbCB7XG4gICAgd2lkdGg6IDYwJTtcbiAgICBtaW4td2lkdGg6IDYwJTtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB9XG59XG4ucHJvZHVjdC1jYXJkLWl0ZW0tLWNoZWNrb3V0LWFkZHJlc3MgLnByb2R1Y3QtY2FyZC1pdGVtX19jb2wtLXRvdGFsIC5wcm9kdWN0LWNhcmQtaXRlbV9faW5uZXIge1xuICAtd2Via2l0LWJveC1hbGlnbjogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIGhlaWdodDogYXV0bztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtY2FyZC1pdGVtLS1jaGVja291dC1hZGRyZXNzIC5wcm9kdWN0LWNhcmQtaXRlbV9fY29sLS1jb250ZW50IHtcbiAgICB3aWR0aDogNDAlO1xuICAgIG1pbi13aWR0aDogNDAlO1xuICB9XG59XG4ucHJvZHVjdC1jYXJkLWl0ZW0tLW9yZGVyLWRldGFpbCAucHJvZHVjdC1jYXJkLWl0ZW1fX2NvbC0taW1hZ2Uge1xuICBtYXJnaW4tbGVmdDogMi4zMzMzMzMzMzMzcmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAwLjMzMzMzMzMzMzNyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5wcm9kdWN0LWNhcmQtaXRlbS0tb3JkZXItZGV0YWlsIC5wcm9kdWN0LWNhcmQtaXRlbV9fY29sLS1pbWFnZSB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgcGFkZGluZy1yaWdodDogMTVweDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1jYXJkLWl0ZW0tLW9yZGVyLWRldGFpbCAucHJvZHVjdC1jYXJkLWl0ZW1fX2NvbC0tdG90YWwge1xuICAgIHdpZHRoOiAzMCU7XG4gICAgbWluLXdpZHRoOiAzMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtY2FyZC1pdGVtIC5wcm9kdWN0LWNhcmQtaXRlbS0tb3JkZXItZGV0YWlsIC5wcm9kdWN0LWNhcmQtaXRlbV9fY29sLS10b3RhbCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtY2FyZC1pdGVtLS1vcmRlci1kZXRhaWwgLnByb2R1Y3QtY2FyZC1pdGVtX19jb2wtLWNvbnRlbnQge1xuICAgIHdpZHRoOiA3MCU7XG4gICAgbWluLXdpZHRoOiA3MCU7XG4gIH1cbn1cbi5wcm9kdWN0LWNhcmQtaXRlbS0tb3JkZXItZGV0YWlsIC5wcm9kdWN0LWNhcmQtaXRlbV9fY29sLS1kZXNjcmlwdGlvbiB7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA1LjJyZW0gLSAyLjMzMzMzMzMzMzNyZW0pO1xuICBtaW4td2lkdGg6IGNhbGMoMTAwJSAtIDUuMnJlbSAtIDIuMzMzMzMzMzMzM3JlbSk7XG4gIHBhZGRpbmctdG9wOiAwO1xuICBwYWRkaW5nLWJvdHRvbTogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnByb2R1Y3QtY2FyZC1pdGVtLS1vcmRlci1kZXRhaWwgLnByb2R1Y3QtY2FyZC1pdGVtX19jb2wtLWRlc2NyaXB0aW9uIHtcbiAgICB3aWR0aDogNzglO1xuICAgIG1pbi13aWR0aDogNzglO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNhcmQtaXRlbS0tb3JkZXItZGV0YWlsIC5wcm9kdWN0LWNhcmQtaXRlbV9fY29sLS1kZXNjcmlwdGlvbiB7XG4gICAgcGFkZGluZy10b3A6IDEuMzMzMzMzMzMzM3JlbTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMXJlbTtcbiAgICBtYXJnaW4tbGVmdDogLTAuNjY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLnByb2R1Y3QtY2FyZC1pdGVtLS1maXhlZC1pbnB1dCB7XG4gIG1heC13aWR0aDogOS4ycmVtO1xuICBtYXJnaW4tYm90dG9tOiAycmVtO1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbi5wcm9kdWN0LWNhcmQtaXRlbS0tc2hvcHBpbmctbGlzdC1hbHRlcm5hdGl2ZSB7XG4gIG1hcmdpbi1ib3R0b206IDAuNjY2NjY2NjY2N3JlbTtcbn1cbi5wcm9kdWN0LWNhcmQtaXRlbS0tc2hvcHBpbmctbGlzdC1hbHRlcm5hdGl2ZSAucHJvZHVjdC1jYXJkLWl0ZW1fX2NvbCB7XG4gIHdpZHRoOiA2OSU7XG4gIG1pbi13aWR0aDogNjklO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1jYXJkLWl0ZW0tLXNob3BwaW5nLWxpc3QtYWx0ZXJuYXRpdmUgLnByb2R1Y3QtY2FyZC1pdGVtX19jb2wge1xuICAgIHdpZHRoOiA3OCU7XG4gICAgbWluLXdpZHRoOiA3OCU7XG4gIH1cbn1cbi5wcm9kdWN0LWNhcmQtaXRlbS0tc2hvcHBpbmctbGlzdC1hbHRlcm5hdGl2ZSAucHJvZHVjdC1jYXJkLWl0ZW1fX2NvbC0taW1hZ2Uge1xuICB3aWR0aDogMzElO1xuICBtaW4td2lkdGg6IDMxJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtY2FyZC1pdGVtLS1zaG9wcGluZy1saXN0LWFsdGVybmF0aXZlIC5wcm9kdWN0LWNhcmQtaXRlbV9fY29sLS1pbWFnZSB7XG4gICAgd2lkdGg6IDIyJTtcbiAgICBtaW4td2lkdGg6IDIyJTtcbiAgfVxufVxuLnByb2R1Y3QtY2FyZC1pdGVtLS1zaG9wcGluZy1saXN0LWFsdGVybmF0aXZlIC5wcm9kdWN0LWNhcmQtaXRlbV9fY29sLS1jb250ZW50IHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi13aWR0aDogMTAwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtY2FyZC1pdGVtLS1zaG9wcGluZy1saXN0LWFsdGVybmF0aXZlIC5wcm9kdWN0LWNhcmQtaXRlbV9fY29sLS1jb250ZW50IHtcbiAgICB3aWR0aDogNTglO1xuICAgIG1pbi13aWR0aDogNTglO1xuICB9XG59XG4ucHJvZHVjdC1jYXJkLWl0ZW0tLXNob3BwaW5nLWxpc3QtYWx0ZXJuYXRpdmUgLnByb2R1Y3QtY2FyZC1pdGVtX19jb2wtLXRvdGFsIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi13aWR0aDogMTAwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtY2FyZC1pdGVtLS1zaG9wcGluZy1saXN0LWFsdGVybmF0aXZlIC5wcm9kdWN0LWNhcmQtaXRlbV9fY29sLS10b3RhbCB7XG4gICAgd2lkdGg6IDQyJTtcbiAgICBtaW4td2lkdGg6IDQyJTtcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucHJvZHVjdC1pdGVtLXZhcmlhbnQtc2VsZWN0b3JfX2xhYmVsIHtcbiAgZm9udC1zaXplOiAwLjg2NjY2NjY2NjdyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIGNvbG9yOiAjNmY2ZjZmO1xuICBtYXJnaW4tcmlnaHQ6IDAuNHJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtaXRlbS12YXJpYW50LXNlbGVjdG9yX19sYWJlbCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAxLjZyZW07XG4gICAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnByb2R1Y3QtaXRlbS12YXJpYW50LXNlbGVjdG9yX19zZWxlY3Qge1xuICAgIC13ZWJraXQtYm94LWZsZXg6IDA7XG4gICAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAwO1xuICAgICAgICAgICAgZmxleC1ncm93OiAwO1xuICB9XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi50YWJsZS1hY3Rpb24tbGluayB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAwLjI2NjY2NjY2NjdyZW0gMXJlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAudGFibGUtYWN0aW9uLWxpbmsge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgbWFyZ2luLXJpZ2h0OiA5cHg7XG4gIH1cbn1cbi50YWJsZS1hY3Rpb24tbGluayAuaWNvbiBzdmcge1xuICB3aWR0aDogMi4zMzMzMzMzMzMzcmVtO1xuICBoZWlnaHQ6IDIuMzMzMzMzMzMzM3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnRhYmxlLWFjdGlvbi1saW5rIC5pY29uIHN2ZyB7XG4gICAgd2lkdGg6IDEuNjY2NjY2NjY2N3JlbTtcbiAgICBoZWlnaHQ6IDEuNjY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLnRhYmxlLWFjdGlvbi1saW5rLS10aWdodCB7XG4gIHBhZGRpbmctbGVmdDogMC4ycmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAwLjJyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC50YWJsZS1hY3Rpb24tbGluay0tdGlnaHQge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbi50YWJsZS1hY3Rpb24tbGluay0taGlkZS10aXRsZSAudGFibGUtYWN0aW9uLWxpbmtfX3RpdGxlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi50YWJsZS1hY3Rpb24tbGluay0tZnVsbC1oZWlnaHQge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBoZWlnaHQ6IDEwMCU7XG59XG4udGFibGUtYWN0aW9uLWxpbmtfX3RpdGxlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmctdG9wOiAwLjJyZW07XG4gIGZvbnQtc2l6ZTogMC43MzMzMzMzMzMzcmVtO1xuICBsaW5lLWhlaWdodDogMC44NjY2NjY2NjY3cmVtO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4udGFibGUtYWN0aW9uLWxpbmsge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMC4yNjY2NjY2NjY3cmVtIDFyZW07XG4gIGJvcmRlcjogMC4wNjY2NjY2NjY3cmVtIHNvbGlkICNkMGQwZDA7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnRhYmxlLWFjdGlvbi1saW5rIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIG1hcmdpbi1yaWdodDogOXB4O1xuICB9XG59XG4udGFibGUtYWN0aW9uLWxpbmstLXRpZ2h0IHtcbiAgcGFkZGluZy1sZWZ0OiAwLjJyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDAuMnJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnRhYmxlLWFjdGlvbi1saW5rLS10aWdodCB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuLnRhYmxlLWFjdGlvbi1saW5rLS1mdWxsLWhlaWdodCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGhlaWdodDogMTAwJTtcbn1cbi50YWJsZS1hY3Rpb24tbGlua19fdGl0bGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZy10b3A6IDAuMnJlbTtcbiAgZm9udC1zaXplOiAwLjczMzMzMzMzMzNyZW07XG4gIGxpbmUtaGVpZ2h0OiAwLjg2NjY2NjY2NjdyZW07XG59XG5cbi50YWJsZS1hY3Rpb24tc3BhbiB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAwLjI2NjY2NjY2NjdyZW0gMXJlbTtcbiAgYm9yZGVyOiAwLjA2NjY2NjY2NjdyZW0gc29saWQgI2QwZDBkMDtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAudGFibGUtYWN0aW9uLXNwYW4ge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgbWFyZ2luLXJpZ2h0OiA5cHg7XG4gIH1cbn1cbi50YWJsZS1hY3Rpb24tc3Bhbi0tdGlnaHQge1xuICBwYWRkaW5nLWxlZnQ6IDAuMnJlbTtcbiAgcGFkZGluZy1yaWdodDogMC4ycmVtO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAudGFibGUtYWN0aW9uLXNwYW4tLXRpZ2h0IHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG4udGFibGUtYWN0aW9uLXNwYW4tLWZ1bGwtaGVpZ2h0IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLnRhYmxlLWFjdGlvbi1zcGFuX190aXRsZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nLXRvcDogMC4ycmVtO1xuICBmb250LXNpemU6IDAuNzMzMzMzMzMzM3JlbTtcbiAgbGluZS1oZWlnaHQ6IDAuODY2NjY2NjY2N3JlbTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnRvZ2dsZXItYWNjb3JkaW9uX19pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMDtcbiAgdG9wOiA1MCU7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgZm9udC1zaXplOiAxLjMzMzMzMzMzMzNyZW07XG59XG4udG9nZ2xlci1hY2NvcmRpb25fX2l0ZW0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbn1cbi50b2dnbGVyLWFjY29yZGlvbl9faXRlbS5hY3RpdmUgLnRvZ2dsZXItYWNjb3JkaW9uX19pY29uIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSkgcm90YXRlKDE4MGRlZyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpIHJvdGF0ZSgxODBkZWcpO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uc2VhcmNoX19uYXZpZ2F0aW9uIHtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICNkMGQwZDA7XG59XG4uc2VhcmNoX19uYXZpZ2F0aW9uIC50YWItZWxlbWVudF9fbmF2IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgZmxleC13cmFwOiBub3dyYXA7XG59XG4uc2VhcmNoX19uYXZpZ2F0aW9uIC50YWItZWxlbWVudF9fbmF2LWl0ZW0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMTBweDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDEwcHg7XG4gIHBhZGRpbmc6IDAuNzVyZW0gMXJlbSAwLjVyZW07XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLnNlYXJjaF9fbmF2aWdhdGlvbiAudGFiLWVsZW1lbnRfX25hdi1pdGVtIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4uc2VhcmNoX19uYXZpZ2F0aW9uIC50YWItZWxlbWVudF9fbmF2LWl0ZW06bm90KDpsYXN0LWNoaWxkKSB7XG4gIG1hcmdpbi1yaWdodDogMC41cmVtO1xufVxuLnNlYXJjaF9fbmF2aWdhdGlvbiAudGFiLWVsZW1lbnRfX25hdi1pdGVtIC50YWItZWxlbWVudF9fbGluayB7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLnNlYXJjaF9fbmF2aWdhdGlvbiAudGFiLWVsZW1lbnRfX25hdi1pdGVtIC50YWItZWxlbWVudF9fbGluazpob3ZlciB7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLnNlYXJjaF9fbmF2aWdhdGlvbiAudGFiLWVsZW1lbnRfX25hdi1pdGVtLmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0YjRiNGQ7XG4gIGNvbG9yOiAjZmZmO1xuICBjb2xvcjogI2ZmZjtcbn1cbi5zZWFyY2hfX25hdmlnYXRpb24gLnRhYi1lbGVtZW50X19uYXYtaXRlbS5hY3RpdmUgc3ZnIHtcbiAgZmlsbDogI2ZmZjtcbn1cbi5zZWFyY2hfX25hdmlnYXRpb24gLnRhYi1lbGVtZW50X19uYXYtaXRlbS5hY3RpdmUgLnRhYi1lbGVtZW50X19saW5rIHtcbiAgY29sb3I6ICNmZmY7XG59XG4uc2VhcmNoX19uYXZpZ2F0aW9uIC50YWItZWxlbWVudF9fbmF2LWl0ZW0uYWN0aXZlIC50YWItZWxlbWVudF9fbGluazpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLnNlYXJjaF9fbmF2aWdhdGlvbiAudGFiLWVsZW1lbnRfX2NvbnRlbnQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbioge1xuICAtbXMtZmxleC1uZWdhdGl2ZTogMTtcbiAgICAgIGZsZXgtc2hyaW5rOiAxO1xufVxuXG4ucGFnZS1sYXlvdXQge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLnBhZ2UtbGF5b3V0IC5jb250ZW50LXdyYXAge1xuICAtd2Via2l0LWJveC1mbGV4OiAwO1xuICAgICAgLW1zLWZsZXg6IG5vbmU7XG4gICAgICAgICAgZmxleDogbm9uZTtcbn1cbkBtZWRpYSBhbGwgYW5kICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSksICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSB7XG4gIC5wYWdlLWxheW91dCAuY29udGVudC13cmFwIHtcbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbiAgICAtbXMtZmxleC1uZWdhdGl2ZTogMCAhaW1wb3J0YW50O1xuICAgICAgICBmbGV4LXNocmluazogMCAhaW1wb3J0YW50O1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgICAgIGZsZXgtYmFzaXM6IGF1dG8gIWltcG9ydGFudDtcbiAgICAvKiBzdHlsZWxpbnQtZW5hYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuICB9XG59XG5cbi5wYWdlLWxheW91dC1tYWluLS1jYXRhbG9nLXBhZ2UsIC5wYWdlLWxheW91dC1tYWluLS1jbXMtc2VhcmNoLXBhZ2Uge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmctdG9wOiAxLjA2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wYWdlLWxheW91dC1tYWluLS1jYXRhbG9nLXBhZ2UsIC5wYWdlLWxheW91dC1tYWluLS1jbXMtc2VhcmNoLXBhZ2Uge1xuICAgIHBhZGRpbmctdG9wOiAxLjMzMzMzMzMzMzNyZW07XG4gIH1cbn1cbi5wYWdlLWxheW91dC1tYWluLS1jYXRhbG9nLXBhZ2UtY29udGVudCAucHJvZHVjdC1saXN0IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgbWFyZ2luOiAwIC0wLjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wYWdlLWxheW91dC1tYWluLS1wZHAge1xuICAgIHBhZGRpbmc6IDMwcHggMCAwO1xuICB9XG59XG4ucGFnZS1sYXlvdXQtbWFpbi0tcXVpY2stb3JkZXItcGFnZSB7XG4gIHBhZGRpbmc6IDAuOTMzMzMzMzMzM3JlbSAwIDRyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wYWdlLWxheW91dC1tYWluLS1xdWljay1vcmRlci1wYWdlIHtcbiAgICBwYWRkaW5nOiAzLjMzMzMzMzMzMzNyZW0gMCAzLjZyZW07XG4gIH1cbn1cbi5wYWdlLWxheW91dC1tYWluLS1jYXJ0LXBhZ2Uge1xuICBwYWRkaW5nLXRvcDogMC45MzMzMzMzMzMzcmVtO1xuICBwYWRkaW5nLWJvdHRvbTogMnJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnBhZ2UtbGF5b3V0LW1haW4tLWNhcnQtcGFnZSB7XG4gICAgcGFkZGluZy10b3A6IDIuMTMzMzMzMzMzM3JlbTtcbiAgICBwYWRkaW5nLWJvdHRvbTogNHJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnBhZ2UtbGF5b3V0LW1haW4tLWNhcnQtcGFnZSB7XG4gICAgcGFkZGluZy1ib3R0b206IDhyZW07XG4gIH1cbn1cbi5wYWdlLWxheW91dC1tYWluLS1jaGVja291dC1wYWdlIHtcbiAgcGFkZGluZy10b3A6IDEuNnJlbTtcbiAgcGFkZGluZy1ib3R0b206IDUuMzMzMzMzMzMzM3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnBhZ2UtbGF5b3V0LW1haW4tLWNoZWNrb3V0LXBhZ2Uge1xuICAgIHBhZGRpbmctdG9wOiAyLjEzMzMzMzMzMzNyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wYWdlLWxheW91dC1tYWluLS1jaGVja291dC1wYWdlIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogOHJlbTtcbiAgfVxufVxuLnBhZ2UtbGF5b3V0LW1haW4tLWNtcy1wYWdlIHtcbiAgcGFkZGluZy10b3A6IDIuMTMzMzMzMzMzM3JlbTtcbiAgcGFkZGluZy1ib3R0b206IDQuNjY2NjY2NjY2N3JlbTtcbn1cbi5wYWdlLWxheW91dC1tYWluLS1zdWNjZXNzIHtcbiAgcGFkZGluZy10b3A6IDA7XG4gIHBhZGRpbmctYm90dG9tOiAzLjMzMzMzMzMzMzNyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAucGFnZS1sYXlvdXQtbWFpbi0tc3VjY2VzcyB7XG4gICAgcGFkZGluZy1ib3R0b206IDcuMzMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLnBhZ2UtbGF5b3V0LW1haW4tLWVycm9yLXBhZ2Uge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xuICBjb2xvcjogI2ZmZjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIHBhZGRpbmctYm90dG9tOiAzcmVtO1xufVxuLnBhZ2UtbGF5b3V0LW1haW4tLWVycm9yLXBhZ2Ugc3ZnIHtcbiAgZmlsbDogI2ZmZjtcbn1cbi5wYWdlLWxheW91dC1tYWluLS1lcnJvci1wYWdlLWJyaWdodCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLnBhZ2UtbGF5b3V0LW1haW4tLWVycm9yLXBhZ2UtYnJpZ2h0IHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4ucGFnZS1sYXlvdXQtbWFpbi0tY291bnRyeS1zZWxlY3QtcGFnZSB7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbn1cbi5wYWdlLWxheW91dC1tYWluLS1jb3VudHJ5LXNlbGVjdC1wYWdlIC5jb250ZW50LXdyYXAge1xuICBtYXJnaW4tdG9wOiAycmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucGFnZS1sYXlvdXQtbWFpbi0tY291bnRyeS1zZWxlY3QtcGFnZSAuY29udGVudC13cmFwIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIHBhZGRpbmc6IDRyZW0gMDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIvYXNzZXRzL2N1cnJlbnQvZGVmYXVsdC9pbWFnZXMvY291bnRyeS1zZWxlY3Rpb24tYmcuanBnXCIpO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gIH1cbn1cbi5wYWdlLWxheW91dC1tYWluX19wZHAtZ2FsbGVyeSB7XG4gIGJhY2tncm91bmQ6ICNmZmY7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IGNhbGMoMTAwJSArIDMwcHgpO1xuICBtaW4td2lkdGg6IDEwMCU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnBhZ2UtbGF5b3V0LW1haW5fX3BkcC1nYWxsZXJ5IHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICB3aWR0aDogY2FsYyg2NjAgLyAxMjAwICogMTAwJSk7XG4gICAgbWluLXdpZHRoOiBjYWxjKDY2MCAvIDEyMDAgKiAxMDAlKTtcbiAgICBtYXJnaW46IDAgMXJlbSAwIDA7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbi5wYWdlLWxheW91dC1tYWluX19wZHAtZ2FsbGVyeSAuaWNvbi0tZ2FsbGVyeS1jbG9zZSxcbi5wYWdlLWxheW91dC1tYWluX19wZHAtZ2FsbGVyeSAuYnV0dG9uLS1nYWxsZXJ5LWZ1bGxzY3JlZW4ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5wYWdlLWxheW91dC1tYWluX19wZHAtZ2FsbGVyeSAuaWNvbi0tZ2FsbGVyeS1jbG9zZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDEuMzMzMzMzMzMzM3JlbTtcbiAgZm9udC1zaXplOiAyLjRyZW07XG4gIHotaW5kZXg6IDcwMTtcbn1cbi5wYWdlLWxheW91dC1tYWluX19wZHAtZ2FsbGVyeSAuYnV0dG9uLS1nYWxsZXJ5LWZ1bGxzY3JlZW4ge1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IDI7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcbiAgcGFkZGluZzogMy43NXB4O1xuICBwYWRkaW5nOiAwLjI1cmVtO1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnBhZ2UtbGF5b3V0LW1haW5fX3BkcC1nYWxsZXJ5IC5idXR0b24tLWdhbGxlcnktZnVsbHNjcmVlbiB7XG4gICAgbGVmdDogYXV0bztcbiAgICByaWdodDogMDtcbiAgfVxufVxuLnBhZ2UtbGF5b3V0LW1haW4tLWRhcmsge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMTUwZGVnLCAjNGI0YjRkLCAjMWExNzFiKTtcbiAgY29sb3I6ICNmZmY7XG4gIHBhZGRpbmctYm90dG9tOiAycmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMTk5cHgpIHtcbiAgLnBhZ2UtbGF5b3V0LW1haW4tLXJpbWxlc3MgLmNvbnRhaW5lciB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuLnBhZ2UtbGF5b3V0LW1haW4uaW1hZ2UtZ2FsbGVyeS0tZnVsbHNjcmVlbiAucGFnZS1sYXlvdXQtbWFpbl9fcGRwLWdhbGxlcnkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgei1pbmRleDogNzAwO1xuICBwYWRkaW5nOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMDIzcHgpIHtcbiAgLnBhZ2UtbGF5b3V0LW1haW4uaW1hZ2UtZ2FsbGVyeS0tZnVsbHNjcmVlbiAucGFnZS1sYXlvdXQtbWFpbl9fcGRwLWdhbGxlcnkge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAucGFnZS1sYXlvdXQtbWFpbi5pbWFnZS1nYWxsZXJ5LS1mdWxsc2NyZWVuIC5wYWdlLWxheW91dC1tYWluX19wZHAtZ2FsbGVyeSB7XG4gICAgcGFkZGluZzogMjBweDtcbiAgICBwYWRkaW5nOiAxLjMzMzMzMzMzMzNyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyM3B4KSB7XG4gIC5wYWdlLWxheW91dC1tYWluLmltYWdlLWdhbGxlcnktLWZ1bGxzY3JlZW4gLmltYWdlLWdhbGxlcnkge1xuICAgIC8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gICAgLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICB9XG4gIC5wYWdlLWxheW91dC1tYWluLmltYWdlLWdhbGxlcnktLWZ1bGxzY3JlZW4gLmltYWdlLWdhbGxlcnlfX3RodW1ibmFpbC1pbWctLXZpZGVvIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5wYWdlLWxheW91dC1tYWluLmltYWdlLWdhbGxlcnktLWZ1bGxzY3JlZW4gLmltYWdlLWdhbGxlcnlfX3RodW1ibmFpbC12aWRlby1wbGF5ZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG5cbi5pcy1sb2NrZWQgLmVtYmVkZGVkU2VydmljZUhlbHBCdXR0b24ge1xuICBkaXNwbGF5OiBub25lO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uYWN0aXZlLWZpbHRlciB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0LCAtd2Via2l0LWJveC1zaGFkb3cgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAyNTBtcyBlYXNlLWluLW91dCwgYmFja2dyb3VuZC1jb2xvciAyNTBtcyBlYXNlLWluLW91dCwgLXdlYmtpdC1ib3gtc2hhZG93IDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDI1MG1zIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQsIGJhY2tncm91bmQtY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMjUwbXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAyNTBtcyBlYXNlLWluLW91dCwgYmFja2dyb3VuZC1jb2xvciAyNTBtcyBlYXNlLWluLW91dCwgLXdlYmtpdC1ib3gtc2hhZG93IDI1MG1zIGVhc2UtaW4tb3V0O1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xuICBwYWRkaW5nOiAwLjY2NjY2NjY2NjdyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjE7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4uYWN0aXZlLWZpbHRlcl9faWNvbiB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICBtYXJnaW4tbGVmdDogMXJlbTtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4uYWN0aXZlLWZpbHRlcl9faWNvbiBzdmcge1xuICB3aWR0aDogMC45MzMzMzMzMzMzcmVtO1xuICBoZWlnaHQ6IDAuOTMzMzMzMzMzM3JlbTtcbn1cbi5hY3RpdmUtZmlsdGVyOmhvdmVyLCAuYWN0aXZlLWZpbHRlcjpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLmFjdGl2ZS1maWx0ZXI6aG92ZXIgc3ZnLCAuYWN0aXZlLWZpbHRlcjpmb2N1cyBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5hamF4LXByb2R1Y3QtbGlzdCB7XG4gICAgbWFyZ2luLXRvcDogMXJlbTtcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY2F0YWxvZy1jbXMtYmxvY2sgPiAqIHtcbiAgZm9udDogNTAwIDEuMnJlbS8xLjUzMzMzMzMzMzNyZW0gXCJMYXRvXCIsIHNhbnMtc2VyaWY7XG59XG4uY2F0YWxvZy1jbXMtYmxvY2sgcCB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDY2NjY2NjY2N3JlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgY29sb3I6ICNkMGQwZDA7XG4gIG1hcmdpbi10b3A6IDAuNjY2NjY2NjY2N3JlbTtcbn1cbi5jYXRhbG9nLWNtcy1ibG9jayBhIHtcbiAgY29sb3I6ICNiMmIyYjI7XG59XG4uY2F0YWxvZy1jbXMtYmxvY2sgYTpob3ZlciwgLmNhdGFsb2ctY21zLWJsb2NrIGE6Zm9jdXMge1xuICBjb2xvcjogI2ZlY2MwMDtcbn1cbi5jYXRhbG9nLWNtcy1ibG9jayBociB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uY2F0YWxvZy1jbXMtYmxvY2stLXNpZGViYXIge1xuICBtYXJnaW4tdG9wOiAzLjJyZW07XG59XG4uY2F0YWxvZy1jbXMtYmxvY2stLXNpZGViYXIgcCB7XG4gIHRleHQtc2hhZG93OiAwIDAuMTMzMzMzMzMzM3JlbSAwLjI2NjY2NjY2NjdyZW0gcmdiYSg3NSwgNzUsIDc3LCAwLjIpO1xufVxuLmNhdGFsb2ctY21zLWJsb2NrLS1maWx0ZXItc2lkZWJhciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jYXRhbG9nLWNtcy1ibG9jay0tZmlsdGVyLXNpZGViYXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG4uY2F0YWxvZy1jbXMtYmxvY2stLWJvdHRvbSB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5jYXRhbG9nLWNtcy1ibG9jay0tYm90dG9tID4gKiB7XG4gIGZvbnQtc2l6ZTogMi4xMzMzMzMzMzMzcmVtO1xuICBsaW5lLWhlaWdodDogMi43MzMzMzMzMzMzcmVtO1xufVxuLmNhdGFsb2ctY21zLWJsb2NrLS1ib3R0b20gPiAqOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5jYXRhbG9nLWNtcy1ibG9jay0tYm90dG9tIGgyIHtcbiAgY29sb3I6ICM2ZjZmNmY7XG4gIGZvbnQtc2l6ZTogMS44NjY2NjY2NjY3cmVtO1xuICBsaW5lLWhlaWdodDogMS4yO1xuICBtYXJnaW4tYm90dG9tOiAxLjA2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jYXRhbG9nLWNtcy1ibG9jay0tYm90dG9tIGgyIHtcbiAgICBmb250LXNpemU6IDJyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5jYXRhbG9nLWNtcy1ibG9jay0tYm90dG9tIGgyIHtcbiAgICBmb250LXNpemU6IDIuMTMzMzMzMzMzM3JlbTtcbiAgICBsaW5lLWhlaWdodDogMi43MzMzMzMzMzMzcmVtO1xuICAgIG1hcmdpbi1ib3R0b206IDEuNnJlbTtcbiAgfVxufVxuLmNhdGFsb2ctY21zLWJsb2NrLS1ib3R0b20gcCB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgY29sb3I6ICNkMGQwZDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjYxO1xuICBtYXgtd2lkdGg6IDY0LjY2NjY2NjY2NjdyZW07XG4gIG1hcmdpbjogMCBhdXRvIDEuNzMzMzMzMzMzM3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNhdGFsb2ctY21zLWJsb2NrLS1ib3R0b20gcCB7XG4gICAgZm9udC1zaXplOiAxLjJyZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMi42NjY2NjY2NjY3cmVtO1xuICB9XG59XG4uY2F0YWxvZy1jbXMtYmxvY2std3JhcCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxYTE3MWI7XG4gIHBhZGRpbmc6IDIuMTMzMzMzMzMzM3JlbSAwIDEuMDY2NjY2NjY2N3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNhdGFsb2ctY21zLWJsb2NrLXdyYXAge1xuICAgIHBhZGRpbmc6IDMuMzMzMzMzMzMzM3JlbSAwIDIuNTMzMzMzMzMzM3JlbTtcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uZmlsdGVyLWNhdGVnb3J5X19tZW51LWl0ZW0ge1xuICBib3JkZXItdG9wLXdpZHRoOiAycHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2VjZWNlYztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmZpbHRlci1jYXRlZ29yeV9fbWVudS1pdGVtIHtcbiAgICBib3JkZXI6IG5vbmU7XG4gIH1cbn1cbi5maWx0ZXItY2F0ZWdvcnlfX21lbnUtaXRlbTpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlcjogbm9uZTtcbn1cbi5maWx0ZXItY2F0ZWdvcnlfX21lbnUtaXRlbS0tbHZsLTEge1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG59XG4uZmlsdGVyLWNhdGVnb3J5X19tZW51LWl0ZW0tLWx2bC0xID4gLmZpbHRlci1jYXRlZ29yeV9faXRlbS1uYW1lIHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4uZmlsdGVyLWNhdGVnb3J5X19tZW51LWl0ZW0tLWx2bC0xID4gLmZpbHRlci1jYXRlZ29yeV9faXRlbS1uYW1lIC5maWx0ZXItY2F0ZWdvcnlfX21lbnUtbGluayB7XG4gIGZvbnQtc2l6ZTogMS4wNjY2NjY2NjY3cmVtO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuLmZpbHRlci1jYXRlZ29yeV9fbWVudS1pdGVtLS1sdmwtMSA+IC5maWx0ZXItY2F0ZWdvcnlfX2l0ZW0tbmFtZTpub3QoOmZpcnN0LWNoaWxkKSB7XG4gIG1hcmdpbi10b3A6IDAuNXJlbTtcbn1cbi5maWx0ZXItY2F0ZWdvcnlfX21lbnUtaXRlbS0tbHZsLTEgPiAuZmlsdGVyLWNhdGVnb3J5X19pdGVtLW5hbWUgLmZpbHRlci1jYXRlZ29yeV9fbWVudS1saW5rLCAuZmlsdGVyLWNhdGVnb3J5X19tZW51LWl0ZW0tLWFjdGl2ZSA+IC5maWx0ZXItY2F0ZWdvcnlfX2l0ZW0tbmFtZSAuZmlsdGVyLWNhdGVnb3J5X19tZW51LWxpbmsge1xuICBmb250LXdlaWdodDogNzAwO1xufVxuLmZpbHRlci1jYXRlZ29yeV9fbWVudS1pdGVtLS1zaG93LWJyYW5jaCB7XG4gIGJvcmRlci10b3Atd2lkdGg6IDJweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjZmZmO1xufVxuLmZpbHRlci1jYXRlZ29yeV9fbWVudS1pdGVtLS1zaG93LWJyYW5jaDpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlcjogbm9uZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmZpbHRlci1jYXRlZ29yeV9fbWVudS1pdGVtLS1zaG93LWJyYW5jaCB7XG4gICAgYm9yZGVyOiBub25lO1xuICB9XG59XG4uZmlsdGVyLWNhdGVnb3J5X19tZW51LWl0ZW0tLWx2bC0yIHtcbiAgcGFkZGluZzogMC41cmVtIDA7XG59XG4uZmlsdGVyLWNhdGVnb3J5X19tZW51LWl0ZW0gLmZpbHRlci1jYXRlZ29yeV9faXRlbS1uYW1lIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC1tcy1mbGV4LWxpbmUtcGFjazogY2VudGVyO1xuICAgICAgYWxpZ24tY29udGVudDogY2VudGVyO1xuICAtbXMtZmxleC13cmFwOiBub3dyYXA7XG4gICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgbWluLWhlaWdodDogMnJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmZpbHRlci1jYXRlZ29yeV9fbWVudS1pdGVtIC5maWx0ZXItY2F0ZWdvcnlfX2l0ZW0tbmFtZSB7XG4gICAgbWluLWhlaWdodDogYXV0bztcbiAgfVxufVxuLmZpbHRlci1jYXRlZ29yeV9fbWVudS1pdGVtLS1sdmwtMyB7XG4gIG1hcmdpbi1sZWZ0OiAxLjVyZW07XG4gIHBhZGRpbmc6IDAuMjVyZW0gMDtcbn1cbi5maWx0ZXItY2F0ZWdvcnlfX21lbnUtaXRlbS0tbHZsLTM6bGFzdC1jaGlsZCB7XG4gIHBhZGRpbmctYm90dG9tOiAwO1xufVxuLmZpbHRlci1jYXRlZ29yeV9fbWVudS1pdGVtLS1sdmwtNCB7XG4gIG1hcmdpbi1sZWZ0OiAxLjVyZW07XG4gIHBhZGRpbmc6IDAuMjVyZW0gMDtcbn1cbi5maWx0ZXItY2F0ZWdvcnlfX21lbnUtaXRlbS0tbHZsLTQ6bGFzdC1jaGlsZCB7XG4gIHBhZGRpbmctYm90dG9tOiAwO1xufVxuLmZpbHRlci1jYXRlZ29yeV9fbWVudS1pdGVtLS1sdmwtNSB7XG4gIG1hcmdpbi1sZWZ0OiAxLjVyZW07XG4gIHBhZGRpbmc6IDAuMjVyZW0gMDtcbn1cbi5maWx0ZXItY2F0ZWdvcnlfX21lbnUtaXRlbS0tbHZsLTU6bGFzdC1jaGlsZCB7XG4gIHBhZGRpbmctYm90dG9tOiAwO1xufVxuLmZpbHRlci1jYXRlZ29yeV9fbWVudS1pdGVtLS1sdmwtNiB7XG4gIG1hcmdpbi1sZWZ0OiAxLjVyZW07XG4gIHBhZGRpbmc6IDAuMjVyZW0gMDtcbn1cbi5maWx0ZXItY2F0ZWdvcnlfX21lbnUtaXRlbS0tbHZsLTY6bGFzdC1jaGlsZCB7XG4gIHBhZGRpbmctYm90dG9tOiAwO1xufVxuLmZpbHRlci1jYXRlZ29yeV9fbWVudS1saW5rIHtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xuICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgcGFkZGluZzogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLmZpbHRlci1jYXRlZ29yeV9fbWVudS1saW5rIHtcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgfVxufVxuLmZpbHRlci1jYXRlZ29yeV9fbWVudS1saW5rIC5idXR0b25fX2ljb24tcmlnaHQge1xuICBtYXJnaW4tbGVmdDogYXV0bztcbn1cbi5maWx0ZXItY2F0ZWdvcnlfX21lbnUtbGlua1tkaXNhYmxlZF0sIC5maWx0ZXItY2F0ZWdvcnlfX21lbnUtbGlua1tkaXNhYmxlZF0uYnV0dG9uLS1kaXNhYmxlZCB7XG4gIGNvbG9yOiAjNmY2ZjZmO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLmZpbHRlci1jYXRlZ29yeV9fbGluay10ZXh0IHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5maWx0ZXItY2F0ZWdvcnlfX2xpbmstdGV4dC0tYWN0aXZlIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uZmlsdGVyLWNhdGVnb3J5X190b2dnbGVyLS1zaG93LXBvaW50ZXIge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uZmlsdGVyLWNhdGVnb3J5X190b2dnbGVyIHN2ZyB7XG4gIHdpZHRoOiAwLjkzMzMzMzMzMzNyZW07XG4gIGhlaWdodDogMC45MzMzMzMzMzMzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuZmlsdGVyLWNhdGVnb3J5X190b2dnbGVyIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgd2lkdGg6IDJyZW07XG4gICAgaGVpZ2h0OiAycmVtO1xuICB9XG59XG4uZmlsdGVyLWNhdGVnb3J5X190b2dnbGVyLWljb24tLWNsb3NlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5maWx0ZXItY2F0ZWdvcnlfX3RvZ2dsZXIuYWN0aXZlIC5maWx0ZXItY2F0ZWdvcnlfX3RvZ2dsZXItaWNvbi0tY2xvc2Uge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uZmlsdGVyLWNhdGVnb3J5X190b2dnbGVyLmFjdGl2ZSAuZmlsdGVyLWNhdGVnb3J5X190b2dnbGVyLWljb24tLW9wZW4ge1xuICBkaXNwbGF5OiBub25lO1xufVxuLmZpbHRlci1jYXRlZ29yeV9fdG9nZ2xlci0tcmlnaHQge1xuICBqdXN0aWZ5LXNlbGY6IGZsZXgtZW5kO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbn1cbi5maWx0ZXItY2F0ZWdvcnlfX2xpc3QtaWNvbiB7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xuICBsaW5lLWhlaWdodDogMS41O1xuICBtYXJnaW4tcmlnaHQ6IDA7XG4gIG1pbi13aWR0aDogMS42NjY2NjY2NjY3cmVtO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxLjY2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMS4ycmVtO1xufVxuLmZpbHRlci1jYXRlZ29yeV9fbGlzdC1pY29uIHN2ZyB7XG4gIHdpZHRoOiAwLjhyZW07XG4gIGhlaWdodDogMC44cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuZmlsdGVyLWNhdGVnb3J5X19saXN0LWljb24ge1xuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGNlbnRlcjtcbiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICB9XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5maWx0ZXItZW51bWVyYXRpb24ge1xuICBtYXJnaW4tYm90dG9tOiAtMC41cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZmlsdGVyLWVudW1lcmF0aW9uIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5maWx0ZXItcmFuZ2VfX2lucHV0cyB7XG4gIG1hcmdpbi10b3A6IDEuMzMzMzMzMzMzM3JlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICM5MjkyOTI7XG59XG4uZmlsdGVyLXJhbmdlX19pbnB1dC13cmFwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmZpbHRlci1yYW5nZV9faW5wdXQtd3JhcCAuaW5wdXQtLWZpbHRlci1yYW5nZSB7XG4gIHBhZGRpbmctcmlnaHQ6IDAuMjVyZW07XG59XG4uZmlsdGVyLXJhbmdlX191bml0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMXJlbTtcbiAgdG9wOiAwLjAzMzMzMzMzMzNyZW07XG4gIGJvdHRvbTogMC4wNjY2NjY2NjY3cmVtO1xuICBib3JkZXItcmFkaXVzOiAwIDEwcHggMTBweCAwO1xuICB3aWR0aDogMS4zMzMzMzMzMzMzcmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmb250LXNpemU6IDAuOHJlbTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmZpbHRlci1yYXRpbmcge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgcGFkZGluZy1sZWZ0OiAwLjY2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5maWx0ZXItcmF0aW5nIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gIH1cbn1cbi5maWx0ZXItcmF0aW5nX190ZXh0IHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLm91dGxldC1maWx0ZXItYnV0dG9ucyB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbn1cbi5vdXRsZXQtZmlsdGVyLWJ1dHRvbnNfX2J1dHRvbiB7XG4gIHBhZGRpbmc6IDAuNXJlbTtcbiAgY29sb3I6ICNmZmY7XG4gIG1hcmdpbi1yaWdodDogMXJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC43NXJlbTtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ub3V0bGV0LWZpbHRlci1idXR0b25zX19idXR0b246aG92ZXIge1xuICBjb2xvcjogI2QwZDBkMDtcbn1cbi5vdXRsZXQtZmlsdGVyLWJ1dHRvbnNfX2J1dHRvbi0tcHJpY2UtYnJhY2tldC0xLTUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGYwNjBmO1xufVxuLm91dGxldC1maWx0ZXItYnV0dG9uc19fYnV0dG9uLS1wcmljZS1icmFja2V0LTYtMTUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjE3YjBkO1xufVxuLm91dGxldC1maWx0ZXItYnV0dG9uc19fYnV0dG9uLS1wcmljZS1icmFja2V0LTE2LTMwIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmY2IwMTtcbn1cbi5vdXRsZXQtZmlsdGVyLWJ1dHRvbnNfX2J1dHRvbi0tcHJpY2UtYnJhY2tldC0zMS01MCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyNDU4OTg7XG59XG4ub3V0bGV0LWZpbHRlci1idXR0b25zX19idXR0b24tLXByaWNlLWJyYWNrZXQtNTAtcGx1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMjkzNDU7XG59XG4ub3V0bGV0LWZpbHRlci1idXR0b25zX19idXR0b24tLXByaWNlLWJyYWNrZXQtMTYtMzAge1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5vdXRsZXQtZmlsdGVyLWJ1dHRvbnNfX2J1dHRvbi0tcHJpY2UtYnJhY2tldC0xNi0zMDpob3ZlciB7XG4gIGNvbG9yOiAjOTI5MjkyO1xufVxuLm91dGxldC1maWx0ZXItYnV0dG9uc19fYnV0dG9uIC5jaGVja2JveCBsYWJlbCxcbi5vdXRsZXQtZmlsdGVyLWJ1dHRvbnNfX2J1dHRvbiAuY2hlY2tib3ggaW5wdXQge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbi5vdXRsZXQtZmlsdGVyLWJ1dHRvbnNfX2J1dHRvbiAuY2hlY2tib3hfX2JveCB7XG4gIG1hcmdpbi1yaWdodDogMC41cmVtO1xufVxuLm91dGxldC1maWx0ZXItYnV0dG9uc19fYnV0dG9uIC5jaGVja2JveF9fY2hlY2s6OmJlZm9yZSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5zb3J0LWxpc3Qge1xuICBtYXJnaW4tYm90dG9tOiAxLjA2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zb3J0LWxpc3Qge1xuICAgIG1hcmdpbi1ib3R0b206IDEuMzMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLnNvcnQtbGlzdF9fY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gIC5zb3J0LWxpc3RfX2NvbnRhaW5lciB7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIC13ZWJraXQtYm94LWFsaWduOiBzdGFydDtcbiAgICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIH1cbn1cbi5zb3J0LWxpc3RfX2xhYmVsIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zb3J0LWxpc3RfX2NvbDpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XG4gIH1cbn1cbi5zb3J0LWxpc3RfX2NvbC0tY291bnRlciB7XG4gIHBhZGRpbmctcmlnaHQ6IDAuNjY2NjY2NjY2N3JlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgZm9udC1zaXplOiAxLjA2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zb3J0LWxpc3RfX2NvbC0tY291bnRlciB7XG4gICAgcGFkZGluZy1ib3R0b206IDAuNjY2NjY2NjY2N3JlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnNvcnQtbGlzdF9fY29sLS1jb3VudGVyIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgfVxufVxuLnNvcnQtbGlzdF9fY29sLS1maWx0ZXJzIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAuc29ydC1saXN0X19jb2wtLWZpbHRlcnMge1xuICAgIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIC13ZWJraXQtYm94LWFsaWduOiBzdGFydDtcbiAgICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5zb3J0LWxpc3RfX2NvbC0tZmlsdGVycyB7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLnNvcnQtbGlzdF9fY29sLS1maWx0ZXJzIHtcbiAgICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG4uc29ydC1saXN0X19jb2wtLXNlbGVjdCB7XG4gIHBhZGRpbmc6IDAgMC4zMzMzMzMzMzMzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc29ydC1saXN0X19jb2wtLXNlbGVjdCB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuLnNvcnQtbGlzdF9fY29sLS1zZWxlY3Q6bm90KDpsYXN0LWNoaWxkKSB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc29ydC1saXN0X19jb2wtLXNlbGVjdDpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAycmVtO1xuICB9XG59XG4uc29ydC1saXN0X19maWx0ZXItZ3JpZCB7XG4gIG1hcmdpbjogMCAtMC4zMzMzMzMzMzMzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc29ydC1saXN0X19maWx0ZXItZ3JpZCB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5zb3J0LWxpc3RfX2ZpbHRlci0tYXZhaWxhYmxlIHtcbiAgICAtd2Via2l0LWJveC1vcmRpbmFsLWdyb3VwOiAzO1xuICAgICAgICAtbXMtZmxleC1vcmRlcjogMjtcbiAgICAgICAgICAgIG9yZGVyOiAyO1xuICAgIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICB9XG4gIC5zb3J0LWxpc3RfX2ZpbHRlci0tYXZhaWxhYmxlIC50b2dnbGUtc3dpdGNoIHtcbiAgICBtYXJnaW4tdG9wOiAxLjVyZW07XG4gIH1cbn1cbi5zb3J0LWxpc3RfX3NvcnQge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5zb3J0LWxpc3RfX3NvcnQge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG4uc29ydC1saXN0IC50b2dnbGUtc3dpdGNoIHtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5zb3J0LWxpc3QgLnRvZ2dsZS1zd2l0Y2gge1xuICAgIHBhZGRpbmc6IDAgM3JlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc29ydC1saXN0IC5kb3dubG9hZC1maWx0ZXIge1xuICAgIGJvcmRlci10b3Atd2lkdGg6IDFweDtcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbiAgICBtYXJnaW4tdG9wOiAxcmVtO1xuICB9XG4gIC5zb3J0LWxpc3QgLmRvd25sb2FkLWZpbHRlciAuY2hlY2tib3hfX2NvdW50ZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi5zb3J0LWxpc3QgLmRvd25sb2FkLWZpbHRlciAuanMtZmlsdGVyLXNlY3Rpb25fX2Rvd25sb2FkcyB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbn1cbi5zb3J0LWxpc3QgLmRvd25sb2FkLWZpbHRlciAubWVudSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG59XG4uc29ydC1saXN0IC5kb3dubG9hZC1maWx0ZXIgLm1lbnVfX2l0ZW0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgcGFkZGluZzogMC41cmVtO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbi5zb3J0LWxpc3QgLmRvd25sb2FkLWZpbHRlciAubWVudV9faXRlbSBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLnNvcnQtbGlzdCAuZG93bmxvYWQtZmlsdGVyIC5tZW51X19pdGVtOm5vdChsYXN0LWNoaWxkKSB7XG4gIG1hcmdpbi1yaWdodDogMC41cmVtO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uc3VnZ2VzdGlvbi1saW5rcy1saXN0IHtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDUwJTtcbiAgICAgIGZsZXgtYmFzaXM6IDUwJTtcbn1cbi5zdWdnZXN0aW9uLWxpbmtzLWxpc3RfX2hlYWRsaW5lLWNvbnRhaW5lciB7XG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjZWNlY2VjO1xuICBkaXNwbGF5OiAtd2Via2l0LWlubGluZS1ib3g7XG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIG1hcmdpbi1ib3R0b206IDAuNzVyZW07XG4gIG1hcmdpbi10b3A6IDA7XG4gIHBhZGRpbmc6IDA7XG4gIHdpZHRoOiAxMDAlO1xufVxuLnN1Z2dlc3Rpb24tbGlua3MtbGlzdF9faGVhZGxpbmUtY29udGFpbmVyIC5oZWFkbGluZSB7XG4gIGxpbmUtaGVpZ2h0OiB1bnNldDtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5zdWdnZXN0aW9uLWxpbmtzLWxpc3RfX3Byb2R1Y3QtY291bnRlciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbGluZS1oZWlnaHQ6IHVuc2V0O1xuICBmb250LXNpemU6IDFyZW07XG4gIG1hcmdpbi1sZWZ0OiAwLjI1cmVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG59XG4uc3VnZ2VzdGlvbi1saW5rcy1saXN0X190aXRsZSB7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgbWFyZ2luOiAxLjczMzMzMzMzMzNyZW0gMCAwO1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5zdWdnZXN0aW9uLWxpbmtzLWxpc3RfX2l0ZW0ge1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjJyZW07XG4gIGxldHRlci1zcGFjaW5nOiAwLjAwNjY2NjY2NjdyZW07XG4gIHBhZGRpbmc6IDA7XG59XG4uc3VnZ2VzdGlvbi1saW5rcy1saXN0X19saW5rIHtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG4uc3VnZ2VzdGlvbi1saW5rcy1saXN0X19saW5rOjpiZWZvcmUge1xuICBjb250ZW50OiBcIj5cIjtcbiAgcGFkZGluZy1yaWdodDogMC4yNXJlbTtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGxpbmUtaGVpZ2h0OiAyO1xufVxuLnN1Z2dlc3Rpb24tbGlua3MtbGlzdF9fbGluay0tc2VhcmNoaHViIHtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5zdWdnZXN0aW9uLWxpbmtzLWxpc3RfX2ljb24ge1xuICBtYXJnaW4tcmlnaHQ6IDAuNXJlbTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnZpZXctbW9kZS1zd2l0Y2gge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1hcmdpbjogMC4ycmVtIC0wLjUzMzMzMzMzMzNyZW0gMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnZpZXctbW9kZS1zd2l0Y2gge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNlY2VjZWM7XG4gICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cbi52aWV3LW1vZGUtc3dpdGNoX19saW5rIHtcbiAgcGFkZGluZzogMCAwLjUzMzMzMzMzMzNyZW07XG4gIGZvbnQtc2l6ZTogMDtcbiAgY29sb3I6ICNkMGQwZDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC52aWV3LW1vZGUtc3dpdGNoX19saW5rIHtcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IGNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICAgIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgd2lkdGg6IDUwJTtcbiAgICAtbXMtZmxleC1uZWdhdGl2ZTogMDtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAwLjhyZW0gMS4zMzMzMzMzMzMzcmVtIDAuNjY2NjY2NjY2N3JlbTtcbiAgICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgICBsaW5lLWhlaWdodDogMS4ycmVtO1xuICB9XG4gIC52aWV3LW1vZGUtc3dpdGNoX19saW5rOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNlY2VjZWM7XG4gIH1cbiAgLnZpZXctbW9kZS1zd2l0Y2hfX2xpbms6Zmlyc3QtY2hpbGQge1xuICAgIHBhZGRpbmctbGVmdDogMS40cmVtO1xuICB9XG4gIC52aWV3LW1vZGUtc3dpdGNoX19saW5rOmhvdmVyLCAudmlldy1tb2RlLXN3aXRjaF9fbGluazpmb2N1cyB7XG4gICAgY29sb3I6ICM5MjkyOTI7XG4gIH1cbn1cbi52aWV3LW1vZGUtc3dpdGNoX19saW5rLS1hY3RpdmUge1xuICBjb2xvcjogIzkyOTI5Mjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnZpZXctbW9kZS1zd2l0Y2hfX2xpbmstLWFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzFhMTcxYjtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICB9XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5hY3RpdmUtZmlsdGVyLXNlY3Rpb24ge1xuICBtYXJnaW4tYm90dG9tOiAwLjhyZW07XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xufVxuLmFjdGl2ZS1maWx0ZXItc2VjdGlvbl9faXRlbS0tdGl0bGUge1xuICBkaXNwbGF5OiBub25lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuYWN0aXZlLWZpbHRlci1zZWN0aW9uX19pdGVtLS10aXRsZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cbi5hY3RpdmUtZmlsdGVyLXNlY3Rpb25fX2l0ZW0tLWZpbHRlcnMge1xuICB3aWR0aDogMTAwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmFjdGl2ZS1maWx0ZXItc2VjdGlvbl9faXRlbS0tZmlsdGVycyB7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbn1cbi5hY3RpdmUtZmlsdGVyLXNlY3Rpb25fX2l0ZW0sXG4uYWN0aXZlLWZpbHRlci1zZWN0aW9uIC5hY3RpdmUtZmlsdGVyIHtcbiAgbWFyZ2luLWJvdHRvbTogMC42NjY2NjY2NjY3cmVtO1xufVxuLmFjdGl2ZS1maWx0ZXItc2VjdGlvbl9faXRlbTpub3QoOmxhc3QtY2hpbGQpLFxuLmFjdGl2ZS1maWx0ZXItc2VjdGlvbiAuYWN0aXZlLWZpbHRlcjpub3QoOmxhc3QtY2hpbGQpIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjY2NjY2NjY2NjdyZW07XG59XG4uYWN0aXZlLWZpbHRlci1zZWN0aW9uX19yZXNldCB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcbiAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LXBhY2s6IGVuZDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICBmb250LXdlaWdodDogNzAwO1xuICBjb2xvcjogIzkyOTI5Mjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmFjdGl2ZS1maWx0ZXItc2VjdGlvbl9fcmVzZXQge1xuICAgIC13ZWJraXQtYm94LXBhY2s6IHN0YXJ0O1xuICAgICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgfVxufVxuLmFjdGl2ZS1maWx0ZXItc2VjdGlvbl9fcmVzZXQ6aG92ZXIsXG4uYWN0aXZlLWZpbHRlci1zZWN0aW9uX19yZXNldDpob3ZlciAuYWN0aXZlLWZpbHRlci1zZWN0aW9uX19yZXNldC1pY29uLCAuYWN0aXZlLWZpbHRlci1zZWN0aW9uX19yZXNldDpmb2N1cyxcbi5hY3RpdmUtZmlsdGVyLXNlY3Rpb25fX3Jlc2V0OmZvY3VzIC5hY3RpdmUtZmlsdGVyLXNlY3Rpb25fX3Jlc2V0LWljb24ge1xuICBjb2xvcjogI2IyYjJiMjtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmZpbHRlci1zZWN0aW9uIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgcmlnaHQ6IDA7XG4gIHBhZGRpbmc6IDAuOTMzMzMzMzMzM3JlbSAxLjMzMzMzMzMzMzNyZW0gNC4zNjY2NjY2NjY3cmVtO1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICB6LWluZGV4OiA0MDE7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5maWx0ZXItc2VjdGlvbiB7XG4gICAgcG9zaXRpb246IHN0YXRpYztcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgbWFyZ2luLWJvdHRvbTogMnJlbTtcbiAgfVxufVxuLmZpbHRlci1zZWN0aW9uX19jbG9zZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDEuMzMzMzMzMzMzM3JlbTtcbiAgdG9wOiAxLjEzMzMzMzMzMzNyZW07XG4gIGNvbG9yOiAjMDAwO1xuICBiYWNrZ3JvdW5kOiBub25lO1xufVxuLmZpbHRlci1zZWN0aW9uX190aXRsZSB7XG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDJweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjZWNlY2VjO1xuICBwYWRkaW5nOiAwIDEuNXJlbSAwLjVyZW07XG4gIG1hcmdpbi1ib3R0b206IDFyZW07XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xuICBsaW5lLWhlaWdodDogMS42NztcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmZpbHRlci1zZWN0aW9uX19zb3J0aW5nIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmctYm90dG9tOiAxLjVyZW07XG59XG4uZmlsdGVyLXNlY3Rpb25fX2hvbGRlciB7XG4gIGhlaWdodDogY2FsYygxMDAlIC0gMTMuNzVyZW0pO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2VjZWNlYztcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5maWx0ZXItc2VjdGlvbl9faG9sZGVyIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgYm9yZGVyOiBub25lO1xuICB9XG59XG4uZmlsdGVyLXNlY3Rpb25fX2l0ZW0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIHBhZGRpbmc6IDEuMnJlbSAxLjMzMzMzMzMzMzNyZW07XG4gIG1hcmdpbi1ib3R0b206IDEuNXJlbTtcbn1cbi5maWx0ZXItc2VjdGlvbl9faXRlbSBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZmlsdGVyLXNlY3Rpb25fX2l0ZW0tLWhvbGxvdyB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG4uZmlsdGVyLXNlY3Rpb25fX2l0ZW0tdGl0bGUge1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgZm9udDogNzAwIDAuODY2NjY2NjY2N3JlbS8xLjEzMzMzMzMzMzNyZW0gXCJMYXRvXCIsIHNhbnMtc2VyaWY7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAyNDY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5maWx0ZXItc2VjdGlvbl9faXRlbS10aXRsZSB7XG4gICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgbGluZS1oZWlnaHQ6IDFyZW07XG4gIH1cbn1cbi5maWx0ZXItc2VjdGlvbl9faXRlbS1jb250ZW50IHtcbiAgbWFyZ2luLXRvcDogMS4zMzMzMzMzMzMzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZmlsdGVyLXNlY3Rpb25fX2l0ZW0tY29udGVudC0taG9sbG93IHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG59XG4uZmlsdGVyLXNlY3Rpb25fX21vZGlmeS1maWx0ZXJzIHtcbiAgbWFyZ2luLXRvcDogLTFyZW07XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbn1cbi5maWx0ZXItc2VjdGlvbl9fZmlsdGVyLWFjdGlvbiB7XG4gIG1hcmdpbi10b3A6IDAuNXJlbTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbXBhdGlibGUtZGltbWVyIHtcbiAgbWFyZ2luOiAxLjVyZW0gMDtcbn1cbi5jb21wYXRpYmxlLWRpbW1lcl9fY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHBhZGRpbmctdG9wOiAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmNvbXBhdGlibGUtZGltbWVyX19jb250YWluZXIge1xuICAgIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5jb21wYXRpYmxlLWRpbW1lcl9fbGlzdCB7XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDY2LjY2NjY2NjY2NjclO1xuICAgICAgICBmbGV4LWJhc2lzOiA2Ni42NjY2NjY2NjY3JTtcbiAgfVxufVxuLmNvbXBhdGlibGUtZGltbWVyX19pdGVtcyB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgcGFkZGluZzogMC43NXJlbSAwLjVyZW07XG59XG4uY29tcGF0aWJsZS1kaW1tZXJfX2l0ZW06bm90KDpsYXN0LWNoaWxkKTo6YWZ0ZXIge1xuICBjb250ZW50OiBcInxcIjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAwIDAuMjVyZW07XG59XG4uY29tcGF0aWJsZS1kaW1tZXJfX2xpbmsge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcDogaW5rO1xuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbi1za2lwLWluazogYXV0bztcbn1cbi5jb21wYXRpYmxlLWRpbW1lcl9fdGl0bGUge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIC13ZWJraXQtYm94LXBhY2s6IHN0YXJ0O1xuICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgcGFkZGluZzogMC41cmVtO1xufVxuLmNvbXBhdGlibGUtZGltbWVyX190aXRsZSBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmNvbXBhdGlibGUtZGltbWVyX190aXRsZSAuaGVhZGxpbmUge1xuICBsaW5lLWhlaWdodDogMS42O1xufVxuLmNvbXBhdGlibGUtZGltbWVyIC5pY29uLW1lc3NhZ2U6bm90KDpsYXN0LWNoaWxkKSB7XG4gIG1hcmdpbi1ib3R0b206IDJyZW07XG59XG4uY29tcGF0aWJsZS1kaW1tZXIgLmljb24tbWVzc2FnZV9faWNvbi1sZWZ0IHN2ZyB7XG4gIHdpZHRoOiAxLjY2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMS42NjY2NjY2NjY3cmVtO1xufVxuLmNvbXBhdGlibGUtZGltbWVyIC5pY29uLW1lc3NhZ2VfX2ljb24tbGVmdC1jb250YWluZXIge1xuICBtaW4td2lkdGg6IDNyZW07XG4gIGhlaWdodDogM3JlbTtcbn1cbi5jb21wYXRpYmxlLWRpbW1lcl9fdGV4dHMge1xuICBtYXJnaW4tdG9wOiAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmNvbXBhdGlibGUtZGltbWVyX190ZXh0cyB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMzMuMzMzMzMzMzMzMyU7XG4gICAgICAgIGZsZXgtYmFzaXM6IDMzLjMzMzMzMzMzMzMlO1xuICAgIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgfVxufVxuLmNvbXBhdGlibGUtZGltbWVyX190ZXh0cyAuaWNvbi1tZXNzYWdlX19pY29uLWxlZnQge1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbi5jb21wYXRpYmxlLWRpbW1lcl9fdGV4dHMgLmljb24tbWVzc2FnZV9faWNvbi1sZWZ0IHN2ZyB7XG4gIHdpZHRoOiAyLjRyZW07XG4gIGhlaWdodDogMi40cmVtO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uZG93bmxvYWQtZHJvcGRvd24ge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmRvd25sb2FkLWRyb3Bkb3duX19pY29uIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmb250LXNpemU6IDJyZW07XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5kb3dubG9hZC1pdGVtIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5kb3dubG9hZC1pdGVtX19pY29uIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmb250LXNpemU6IDJyZW07XG59XG4uZG93bmxvYWQtaXRlbSAuYnV0dG9uLS1saW5rIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBwYWRkaW5nOiAwIDAuMjVyZW07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4uZG93bmxvYWQtaXRlbS0tY29uZmlndXJhdG9yIHtcbiAgbWFyZ2luOiAwIDAuNXJlbSAwIDAuNXJlbTtcbn1cbi5kb3dubG9hZC1pdGVtLS1jb25maWd1cmF0b3Iuc3BhY2luZy1ib3R0b20ge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4udGVjaG5pY2FsLWljb25zIHtcbiAgbWFyZ2luOiAxLjVyZW0gMCAxcmVtO1xufVxuLnRlY2huaWNhbC1pY29ucy0tbm8tc3BhY2luZy10b3Age1xuICBtYXJnaW4tdG9wOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLnRlY2huaWNhbC1pY29ucy0tYnV5LWJveCwgLnRlY2huaWNhbC1pY29ucy0tZGVzY3JpcHRpb24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi50ZWNobmljYWwtaWNvbnNfX2hlYWRlciB7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG4udGVjaG5pY2FsLWljb25zX19pY29uLWNvbnRhaW5lciwgLnRlY2huaWNhbC1pY29uc19faWNvbi1saXN0IHtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbi50ZWNobmljYWwtaWNvbnNfX2ljb24tY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBib3JkZXItdG9wLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xuICBwYWRkaW5nOiAwLjI1cmVtIDA7XG59XG4udGVjaG5pY2FsLWljb25zX19pY29uLWNvbnRhaW5lci0tbm8tYm9yZGVyIHtcbiAgYm9yZGVyOiBub25lO1xufVxuLnRlY2huaWNhbC1pY29uc19faWNvbi1saXN0IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xuICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IHN0YXJ0O1xuICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xufVxuLnRlY2huaWNhbC1pY29uc19faWNvbi1saXN0IC5pY29uLWJ1dHRvbiB7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbiAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLnRlY2huaWNhbC1pY29uc19faWNvbi1saXN0IC5pY29uLWJ1dHRvbiBzdmcge1xuICB3aWR0aDogM3JlbTtcbiAgaGVpZ2h0OiAzcmVtO1xufVxuLnRlY2huaWNhbC1pY29uc19faWNvbi1saXN0IC5pY29uLWJ1dHRvbl9fdGV4dCB7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xufVxuLnRlY2huaWNhbC1pY29uc19faWNvbi1saXN0IC5pY29uLWJ1dHRvbl9faWNvbi1jb250YWluZXIsXG4udGVjaG5pY2FsLWljb25zX19pY29uLWxpc3QgLmljb24tYnV0dG9uIC5pY29uIHtcbiAgd2lkdGg6IDJyZW07XG59XG4udGVjaG5pY2FsLWljb25zX19pY29uLWxpc3QgLmljb24tYnV0dG9uLS1yZWN0IHN2ZyB7XG4gIHdpZHRoOiA2cmVtO1xuICBoZWlnaHQ6IDNyZW07XG59XG4udGVjaG5pY2FsLWljb25zX19pY29uLWxpc3QgLmljb24tYnV0dG9uLS1yZWN0IC5pY29uLWJ1dHRvbl9faWNvbi1jb250YWluZXIsXG4udGVjaG5pY2FsLWljb25zX19pY29uLWxpc3QgLmljb24tYnV0dG9uLS1yZWN0IC5pY29uIHtcbiAgd2lkdGg6IDMuNzMzMzMzMzMzM3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC50ZWNobmljYWwtaWNvbnNfX2ljb24tbGlzdCAuaWNvbi1idXR0b25fX2ljb24ge1xuICAgIGZvbnQtc2l6ZTogM3JlbTtcbiAgfVxuICAudGVjaG5pY2FsLWljb25zX19pY29uLWxpc3QgLmljb24tYnV0dG9uX19pY29uLWNvbnRhaW5lcixcbiAgLnRlY2huaWNhbC1pY29uc19faWNvbi1saXN0IC5pY29uLWJ1dHRvbiAuaWNvbiB7XG4gICAgd2lkdGg6IDNyZW07XG4gIH1cbiAgLnRlY2huaWNhbC1pY29uc19faWNvbi1saXN0IC5pY29uLWJ1dHRvbi0tcmVjdCAuaWNvbi1idXR0b25fX2ljb24tY29udGFpbmVyLFxuICAudGVjaG5pY2FsLWljb25zX19pY29uLWxpc3QgLmljb24tYnV0dG9uLS1yZWN0IC5pY29uIHtcbiAgICB3aWR0aDogNnJlbTtcbiAgfVxuICAudGVjaG5pY2FsLWljb25zX19pY29uLWxpc3QgLmljb24tYnV0dG9uIFtjbGFzc149cGF0aF0sXG4gIC50ZWNobmljYWwtaWNvbnNfX2ljb24tbGlzdCAuaWNvbi1idXR0b24gW2NsYXNzKj1wYXRoXSB7XG4gICAgZm9udC1zaXplOiAzcmVtO1xuICB9XG4gIC50ZWNobmljYWwtaWNvbnNfX2ljb24tbGlzdCAuaWNvbi1idXR0b24gW2NsYXNzXj1wYXRoXTo6YmVmb3JlLFxuICAudGVjaG5pY2FsLWljb25zX19pY29uLWxpc3QgLmljb24tYnV0dG9uIFtjbGFzcyo9cGF0aF06OmJlZm9yZSB7XG4gICAgbWFyZ2luLWxlZnQ6IC0xLjVyZW07XG4gIH1cbn1cbi50ZWNobmljYWwtaWNvbnNfX2luZm8tY29udGFpbmVyLCAudGVjaG5pY2FsLWljb25zX19pY29uLXRleHQge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xuICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cbi50ZWNobmljYWwtaWNvbnNfX2luZm8tY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLnRlY2huaWNhbC1pY29uc19faW5mby1jb250YWluZXIgLnRlY2huaWNhbC1pY29uc19faWNvbi10ZXh0IHtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDgwJTtcbiAgICAgIGZsZXgtYmFzaXM6IDgwJTtcbn1cbi50ZWNobmljYWwtaWNvbnNfX2luZm8tY29udGFpbmVyIC50ZWNobmljYWwtaWNvbnNfX2ljb24taW5mbyB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cbi50ZWNobmljYWwtaWNvbnNfX2luZm8tY29udGFpbmVyIC50ZWNobmljYWwtaWNvbnNfX2ljb24taW5mby0taWNvbi1jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHdpZHRoOiA0LjI2NjY2NjY2NjdyZW07XG4gIG1hcmdpbi1yaWdodDogMXJlbTtcbn1cbi50ZWNobmljYWwtaWNvbnNfX2luZm8tY29udGFpbmVyIC50ZWNobmljYWwtaWNvbnNfX2ljb24taW5mbyAuaWNvbiB7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbn1cbi50ZWNobmljYWwtaWNvbnNfX2FuaW1hdGlvbi1ib3gge1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTAwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMDAlKTtcbiAgbWFyZ2luLXRvcDogLTEwMCU7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAuNXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGFsbCAwLjVzIGVhc2UtaW4tb3V0O1xufVxuLnRlY2huaWNhbC1pY29uc19fYW5jaG9yLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgYm9yZGVyLXRvcC13aWR0aDogMXB4O1xuICBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgZGlzcGxheTogbm9uZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gIC50ZWNobmljYWwtaWNvbnNfX2FuY2hvci1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG4udGVjaG5pY2FsLWljb25zX19jYXJldHMge1xuICBtYXJnaW4tbGVmdDogMXJlbTtcbn1cbi50ZWNobmljYWwtaWNvbnNfX29wZW4gc3ZnLCAudGVjaG5pY2FsLWljb25zX19jbG9zZSBzdmcge1xuICB3aWR0aDogMC45MzMzMzMzMzMzcmVtO1xuICBoZWlnaHQ6IDAuOTMzMzMzMzMzM3JlbTtcbn1cbi50ZWNobmljYWwtaWNvbnNfX2Nsb3NlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi50ZWNobmljYWwtaWNvbnMuaXMtb3BlbiAudGVjaG5pY2FsLWljb25zX19hbmltYXRpb24tYm94IHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICBtYXJnaW4tdG9wOiAwO1xufVxuLnRlY2huaWNhbC1pY29ucy5pcy1vcGVuIC50ZWNobmljYWwtaWNvbnNfX29wZW4ge1xuICBkaXNwbGF5OiBub25lO1xufVxuLnRlY2huaWNhbC1pY29ucy5pcy1vcGVuIC50ZWNobmljYWwtaWNvbnNfX2Nsb3NlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4udmFyaWFudC1jb25maWd1cmF0b3Ige1xuICBib3JkZXItdG9wLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xuICBwYWRkaW5nLXRvcDogMXJlbTtcbiAgbWFyZ2luLXRvcDogMC41cmVtO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xufVxuLnZhcmlhbnQtY29uZmlndXJhdG9yX19zZWxlY3Rpb24ge1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW4tbGVmdDogLTAuNXJlbTtcbiAgbWFyZ2luLXJpZ2h0OiAtMC41cmVtO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uYXZhaWxhYmlsaXR5IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbn1cbi5hdmFpbGFiaWxpdHlfX2xhYmVsIHtcbiAgbWFyZ2luLWxlZnQ6IDFyZW07XG59XG4uYXZhaWxhYmlsaXR5X19sYWJlbC0tc21hbGwge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbn1cbi5hdmFpbGFiaWxpdHktLWhpZGUtbGFiZWwgLmF2YWlsYWJpbGl0eV9fbGFiZWwge1xuICBkaXNwbGF5OiBub25lO1xufVxuLmF2YWlsYWJpbGl0eV9fZG90cyB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIHdpZHRoOiBjYWxjKCgwLjhyZW0gKyAwLjI1cmVtICogMikgKiAzKTtcbn1cbi5hdmFpbGFiaWxpdHlfX2RvdDpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmF2YWlsYWJpbGl0eS0tcHJvZHVjdC1jb25maWd1cmF0b3Ige1xuICBtYXJnaW4tbGVmdDogMS41cmVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG59XG4uYXZhaWxhYmlsaXR5LS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAuYXZhaWxhYmlsaXR5X19kb3RzIHtcbiAgd2lkdGg6IGF1dG87XG59XG4uYXZhaWxhYmlsaXR5X19kb3Qge1xuICBib3JkZXItcmFkaXVzOiA5OTk5cHg7XG4gIHdpZHRoOiAwLjhyZW07XG4gIGhlaWdodDogMC44cmVtO1xuICBtYXJnaW4tbGVmdDogMC4yNXJlbTtcbiAgbWFyZ2luLXJpZ2h0OiAwLjI1cmVtO1xufVxuLmF2YWlsYWJpbGl0eV9fZG90LS1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAxOTAzOTtcbn1cbi5hdmFpbGFiaWxpdHlfX2RvdC0tc3VjY2Vzcy1saWdodCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNhYmQxOGI7XG59XG4uYXZhaWxhYmlsaXR5X19kb3QtLXdhcm5pbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTg5YzMwO1xufVxuLmF2YWlsYWJpbGl0eV9fZG90LS1hbGVydCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlMzIyMTM7XG59XG4uYXZhaWxhYmlsaXR5X19kb3QtLWluZm8ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVjYzAwO1xufVxuLmF2YWlsYWJpbGl0eV9fZG90LS1uZXV0cmFsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzkyOTI5Mjtcbn1cbi5hdmFpbGFiaWxpdHlfX2RvdC0taW5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDBkMGQwO1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5hdmFpbGFiaWxpdHlfX2RvdC0taW5hY3RpdmUgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi5hdmFpbGFiaWxpdHlfX2luaG91c2UtcHJvZHVjdGlvbiB7XG4gIGZvbnQtc2l6ZTogMi40cmVtO1xuICBsaW5lLWhlaWdodDogMnJlbTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMi40cmVtO1xuICBoZWlnaHQ6IDEuNDY2NjY2NjY2N3JlbTtcbn1cbi5hdmFpbGFiaWxpdHlfX2luaG91c2UtcHJvZHVjdGlvbiBzdmcge1xuICB3aWR0aDogMi40cmVtO1xuICBoZWlnaHQ6IDIuNHJlbTtcbn1cbi5hdmFpbGFiaWxpdHlfX2luaG91c2UtcHJvZHVjdGlvbiBzdmcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5iYWNrZ3JvdW5kLS10ZXh0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRiNGI0ZDtcbn1cbi5iYWNrZ3JvdW5kLS10ZXh0IHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4uYmFja2dyb3VuZC0td2hpdGUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuLmJhY2tncm91bmQtLXdoaXRlIHN2ZyB7XG4gIGZpbGw6ICNmZmY7XG59XG4uYmFja2dyb3VuZC0tbWFpbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWNjMDA7XG59XG4uYmFja2dyb3VuZC0tbWFpbiBzdmcge1xuICBmaWxsOiAjZmVjYzAwO1xufVxuLmJhY2tncm91bmQtLWFsdCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0YjRiNGQ7XG59XG4uYmFja2dyb3VuZC0tYWx0IHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4uYmFja2dyb3VuZC0tZGFyayB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxYTE3MWI7XG59XG4uYmFja2dyb3VuZC0tZGFyayBzdmcge1xuICBmaWxsOiAjMWExNzFiO1xufVxuLmJhY2tncm91bmQtLWJsYWNrIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDtcbn1cbi5iYWNrZ3JvdW5kLS1ibGFjayBzdmcge1xuICBmaWxsOiAjMDAwO1xufVxuLmJhY2tncm91bmQtLXRyYW5zcGFyZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbn1cbi5iYWNrZ3JvdW5kLS10cmFuc3BhcmVudCBzdmcge1xuICBmaWxsOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xufVxuLmJhY2tncm91bmQtLW92ZXJsYXkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG59XG4uYmFja2dyb3VuZC0tb3ZlcmxheSBzdmcge1xuICBmaWxsOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG59XG4uYmFja2dyb3VuZC0tY29udHJvbHMtb3ZlcmxheSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTtcbn1cbi5iYWNrZ3JvdW5kLS1jb250cm9scy1vdmVybGF5IHN2ZyB7XG4gIGZpbGw6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTtcbn1cbi5iYWNrZ3JvdW5kLS1ncmF5LTEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xufVxuLmJhY2tncm91bmQtLWdyYXktMSBzdmcge1xuICBmaWxsOiAjZWNlY2VjO1xufVxuLmJhY2tncm91bmQtLWdyYXktMiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkMGQwZDA7XG59XG4uYmFja2dyb3VuZC0tZ3JheS0yIHN2ZyB7XG4gIGZpbGw6ICNkMGQwZDA7XG59XG4uYmFja2dyb3VuZC0tZ3JheS0zIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IyYjJiMjtcbn1cbi5iYWNrZ3JvdW5kLS1ncmF5LTMgc3ZnIHtcbiAgZmlsbDogI2IyYjJiMjtcbn1cbi5iYWNrZ3JvdW5kLS1ncmF5LTQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTI5MjkyO1xufVxuLmJhY2tncm91bmQtLWdyYXktNCBzdmcge1xuICBmaWxsOiAjOTI5MjkyO1xufVxuLmJhY2tncm91bmQtLWdyYXktNSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2ZjZmNmY7XG59XG4uYmFja2dyb3VuZC0tZ3JheS01IHN2ZyB7XG4gIGZpbGw6ICM2ZjZmNmY7XG59XG4uYmFja2dyb3VuZC0tZ3JheS02IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRiNGI0ZDtcbn1cbi5iYWNrZ3JvdW5kLS1ncmF5LTYgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi5iYWNrZ3JvdW5kLS1ncmF5LTcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWExNzFiO1xufVxuLmJhY2tncm91bmQtLWdyYXktNyBzdmcge1xuICBmaWxsOiAjMWExNzFiO1xufVxuLmJhY2tncm91bmQtLXJlZC0xIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UzMjIxMztcbn1cbi5iYWNrZ3JvdW5kLS1yZWQtMSBzdmcge1xuICBmaWxsOiAjZTMyMjEzO1xufVxuLmJhY2tncm91bmQtLXJlZC0yIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UxMzA2Yztcbn1cbi5iYWNrZ3JvdW5kLS1yZWQtMiBzdmcge1xuICBmaWxsOiAjZTEzMDZjO1xufVxuLmJhY2tncm91bmQtLXJlZC0zIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RkMWExNjtcbn1cbi5iYWNrZ3JvdW5kLS1yZWQtMyBzdmcge1xuICBmaWxsOiAjZGQxYTE2O1xufVxuLmJhY2tncm91bmQtLWZhY2Vib29rIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzNiNTk5ODtcbn1cbi5iYWNrZ3JvdW5kLS1mYWNlYm9vayBzdmcge1xuICBmaWxsOiAjM2I1OTk4O1xufVxuLmJhY2tncm91bmQtLXR3aXR0ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3N2I1O1xufVxuLmJhY2tncm91bmQtLXR3aXR0ZXIgc3ZnIHtcbiAgZmlsbDogIzAwNzdiNTtcbn1cbi5iYWNrZ3JvdW5kLS1lZWstYSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNhZmM3MGQ7XG59XG4uYmFja2dyb3VuZC0tZWVrLWEgc3ZnIHtcbiAgZmlsbDogI2FmYzcwZDtcbn1cbi5iYWNrZ3JvdW5kLS1lZWstYTEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNThhYjMyO1xufVxuLmJhY2tncm91bmQtLWVlay1hMSBzdmcge1xuICBmaWxsOiAjNThhYjMyO1xufVxuLmJhY2tncm91bmQtLWVlay1hMiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMTkwMzk7XG59XG4uYmFja2dyb3VuZC0tZWVrLWEyIHN2ZyB7XG4gIGZpbGw6ICMwMTkwMzk7XG59XG4uYmFja2dyb3VuZC0tZWVrLWIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmRlYTE0O1xufVxuLmJhY2tncm91bmQtLWVlay1iIHN2ZyB7XG4gIGZpbGw6ICNmZGVhMTQ7XG59XG4uYmFja2dyb3VuZC0tZWVrLWMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmRjYjAwO1xufVxuLmJhY2tncm91bmQtLWVlay1jIHN2ZyB7XG4gIGZpbGw6ICNmZGNiMDA7XG59XG4uYmFja2dyb3VuZC0tZWVrLWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjE5MzA1O1xufVxuLmJhY2tncm91bmQtLWVlay1kIHN2ZyB7XG4gIGZpbGw6ICNmMTkzMDU7XG59XG4uYmFja2dyb3VuZC0tZWVrLWUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTAwNzFiO1xufVxuLmJhY2tncm91bmQtLWVlay1lIHN2ZyB7XG4gIGZpbGw6ICNlMDA3MWI7XG59XG4uYmFja2dyb3VuZC0taG92ZXItdGV4dDpob3ZlciwgLmJhY2tncm91bmQtLWhvdmVyLXRleHQ6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGI0YjRkO1xufVxuLmJhY2tncm91bmQtLWhvdmVyLXRleHQ6aG92ZXIgc3ZnLCAuYmFja2dyb3VuZC0taG92ZXItdGV4dDpmb2N1cyBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmJhY2tncm91bmQtLWhvdmVyLXdoaXRlOmhvdmVyLCAuYmFja2dyb3VuZC0taG92ZXItd2hpdGU6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuLmJhY2tncm91bmQtLWhvdmVyLXdoaXRlOmhvdmVyIHN2ZywgLmJhY2tncm91bmQtLWhvdmVyLXdoaXRlOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICNmZmY7XG59XG4uYmFja2dyb3VuZC0taG92ZXItbWFpbjpob3ZlciwgLmJhY2tncm91bmQtLWhvdmVyLW1haW46Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVjYzAwO1xufVxuLmJhY2tncm91bmQtLWhvdmVyLW1haW46aG92ZXIgc3ZnLCAuYmFja2dyb3VuZC0taG92ZXItbWFpbjpmb2N1cyBzdmcge1xuICBmaWxsOiAjZmVjYzAwO1xufVxuLmJhY2tncm91bmQtLWhvdmVyLWFsdDpob3ZlciwgLmJhY2tncm91bmQtLWhvdmVyLWFsdDpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0YjRiNGQ7XG59XG4uYmFja2dyb3VuZC0taG92ZXItYWx0OmhvdmVyIHN2ZywgLmJhY2tncm91bmQtLWhvdmVyLWFsdDpmb2N1cyBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmJhY2tncm91bmQtLWhvdmVyLWRhcms6aG92ZXIsIC5iYWNrZ3JvdW5kLS1ob3Zlci1kYXJrOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFhMTcxYjtcbn1cbi5iYWNrZ3JvdW5kLS1ob3Zlci1kYXJrOmhvdmVyIHN2ZywgLmJhY2tncm91bmQtLWhvdmVyLWRhcms6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogIzFhMTcxYjtcbn1cbi5iYWNrZ3JvdW5kLS1ob3Zlci1ibGFjazpob3ZlciwgLmJhY2tncm91bmQtLWhvdmVyLWJsYWNrOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDtcbn1cbi5iYWNrZ3JvdW5kLS1ob3Zlci1ibGFjazpob3ZlciBzdmcsIC5iYWNrZ3JvdW5kLS1ob3Zlci1ibGFjazpmb2N1cyBzdmcge1xuICBmaWxsOiAjMDAwO1xufVxuLmJhY2tncm91bmQtLWhvdmVyLXRyYW5zcGFyZW50OmhvdmVyLCAuYmFja2dyb3VuZC0taG92ZXItdHJhbnNwYXJlbnQ6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xufVxuLmJhY2tncm91bmQtLWhvdmVyLXRyYW5zcGFyZW50OmhvdmVyIHN2ZywgLmJhY2tncm91bmQtLWhvdmVyLXRyYW5zcGFyZW50OmZvY3VzIHN2ZyB7XG4gIGZpbGw6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG59XG4uYmFja2dyb3VuZC0taG92ZXItb3ZlcmxheTpob3ZlciwgLmJhY2tncm91bmQtLWhvdmVyLW92ZXJsYXk6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG59XG4uYmFja2dyb3VuZC0taG92ZXItb3ZlcmxheTpob3ZlciBzdmcsIC5iYWNrZ3JvdW5kLS1ob3Zlci1vdmVybGF5OmZvY3VzIHN2ZyB7XG4gIGZpbGw6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbn1cbi5iYWNrZ3JvdW5kLS1ob3Zlci1jb250cm9scy1vdmVybGF5OmhvdmVyLCAuYmFja2dyb3VuZC0taG92ZXItY29udHJvbHMtb3ZlcmxheTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTtcbn1cbi5iYWNrZ3JvdW5kLS1ob3Zlci1jb250cm9scy1vdmVybGF5OmhvdmVyIHN2ZywgLmJhY2tncm91bmQtLWhvdmVyLWNvbnRyb2xzLW92ZXJsYXk6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpO1xufVxuLmJhY2tncm91bmQtLWhvdmVyLWdyYXktMTpob3ZlciwgLmJhY2tncm91bmQtLWhvdmVyLWdyYXktMTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7XG59XG4uYmFja2dyb3VuZC0taG92ZXItZ3JheS0xOmhvdmVyIHN2ZywgLmJhY2tncm91bmQtLWhvdmVyLWdyYXktMTpmb2N1cyBzdmcge1xuICBmaWxsOiAjZWNlY2VjO1xufVxuLmJhY2tncm91bmQtLWhvdmVyLWdyYXktMjpob3ZlciwgLmJhY2tncm91bmQtLWhvdmVyLWdyYXktMjpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkMGQwZDA7XG59XG4uYmFja2dyb3VuZC0taG92ZXItZ3JheS0yOmhvdmVyIHN2ZywgLmJhY2tncm91bmQtLWhvdmVyLWdyYXktMjpmb2N1cyBzdmcge1xuICBmaWxsOiAjZDBkMGQwO1xufVxuLmJhY2tncm91bmQtLWhvdmVyLWdyYXktMzpob3ZlciwgLmJhY2tncm91bmQtLWhvdmVyLWdyYXktMzpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNiMmIyYjI7XG59XG4uYmFja2dyb3VuZC0taG92ZXItZ3JheS0zOmhvdmVyIHN2ZywgLmJhY2tncm91bmQtLWhvdmVyLWdyYXktMzpmb2N1cyBzdmcge1xuICBmaWxsOiAjYjJiMmIyO1xufVxuLmJhY2tncm91bmQtLWhvdmVyLWdyYXktNDpob3ZlciwgLmJhY2tncm91bmQtLWhvdmVyLWdyYXktNDpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM5MjkyOTI7XG59XG4uYmFja2dyb3VuZC0taG92ZXItZ3JheS00OmhvdmVyIHN2ZywgLmJhY2tncm91bmQtLWhvdmVyLWdyYXktNDpmb2N1cyBzdmcge1xuICBmaWxsOiAjOTI5MjkyO1xufVxuLmJhY2tncm91bmQtLWhvdmVyLWdyYXktNTpob3ZlciwgLmJhY2tncm91bmQtLWhvdmVyLWdyYXktNTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2ZjZmNmY7XG59XG4uYmFja2dyb3VuZC0taG92ZXItZ3JheS01OmhvdmVyIHN2ZywgLmJhY2tncm91bmQtLWhvdmVyLWdyYXktNTpmb2N1cyBzdmcge1xuICBmaWxsOiAjNmY2ZjZmO1xufVxuLmJhY2tncm91bmQtLWhvdmVyLWdyYXktNjpob3ZlciwgLmJhY2tncm91bmQtLWhvdmVyLWdyYXktNjpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0YjRiNGQ7XG59XG4uYmFja2dyb3VuZC0taG92ZXItZ3JheS02OmhvdmVyIHN2ZywgLmJhY2tncm91bmQtLWhvdmVyLWdyYXktNjpmb2N1cyBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmJhY2tncm91bmQtLWhvdmVyLWdyYXktNzpob3ZlciwgLmJhY2tncm91bmQtLWhvdmVyLWdyYXktNzpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxYTE3MWI7XG59XG4uYmFja2dyb3VuZC0taG92ZXItZ3JheS03OmhvdmVyIHN2ZywgLmJhY2tncm91bmQtLWhvdmVyLWdyYXktNzpmb2N1cyBzdmcge1xuICBmaWxsOiAjMWExNzFiO1xufVxuLmJhY2tncm91bmQtLWhvdmVyLXJlZC0xOmhvdmVyLCAuYmFja2dyb3VuZC0taG92ZXItcmVkLTE6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTMyMjEzO1xufVxuLmJhY2tncm91bmQtLWhvdmVyLXJlZC0xOmhvdmVyIHN2ZywgLmJhY2tncm91bmQtLWhvdmVyLXJlZC0xOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICNlMzIyMTM7XG59XG4uYmFja2dyb3VuZC0taG92ZXItcmVkLTI6aG92ZXIsIC5iYWNrZ3JvdW5kLS1ob3Zlci1yZWQtMjpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlMTMwNmM7XG59XG4uYmFja2dyb3VuZC0taG92ZXItcmVkLTI6aG92ZXIgc3ZnLCAuYmFja2dyb3VuZC0taG92ZXItcmVkLTI6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogI2UxMzA2Yztcbn1cbi5iYWNrZ3JvdW5kLS1ob3Zlci1yZWQtMzpob3ZlciwgLmJhY2tncm91bmQtLWhvdmVyLXJlZC0zOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RkMWExNjtcbn1cbi5iYWNrZ3JvdW5kLS1ob3Zlci1yZWQtMzpob3ZlciBzdmcsIC5iYWNrZ3JvdW5kLS1ob3Zlci1yZWQtMzpmb2N1cyBzdmcge1xuICBmaWxsOiAjZGQxYTE2O1xufVxuLmJhY2tncm91bmQtLWhvdmVyLWZhY2Vib29rOmhvdmVyLCAuYmFja2dyb3VuZC0taG92ZXItZmFjZWJvb2s6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2I1OTk4O1xufVxuLmJhY2tncm91bmQtLWhvdmVyLWZhY2Vib29rOmhvdmVyIHN2ZywgLmJhY2tncm91bmQtLWhvdmVyLWZhY2Vib29rOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICMzYjU5OTg7XG59XG4uYmFja2dyb3VuZC0taG92ZXItdHdpdHRlcjpob3ZlciwgLmJhY2tncm91bmQtLWhvdmVyLXR3aXR0ZXI6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3N2I1O1xufVxuLmJhY2tncm91bmQtLWhvdmVyLXR3aXR0ZXI6aG92ZXIgc3ZnLCAuYmFja2dyb3VuZC0taG92ZXItdHdpdHRlcjpmb2N1cyBzdmcge1xuICBmaWxsOiAjMDA3N2I1O1xufVxuLmJhY2tncm91bmQtLWhvdmVyLWVlay1hOmhvdmVyLCAuYmFja2dyb3VuZC0taG92ZXItZWVrLWE6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWZjNzBkO1xufVxuLmJhY2tncm91bmQtLWhvdmVyLWVlay1hOmhvdmVyIHN2ZywgLmJhY2tncm91bmQtLWhvdmVyLWVlay1hOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICNhZmM3MGQ7XG59XG4uYmFja2dyb3VuZC0taG92ZXItZWVrLWExOmhvdmVyLCAuYmFja2dyb3VuZC0taG92ZXItZWVrLWExOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzU4YWIzMjtcbn1cbi5iYWNrZ3JvdW5kLS1ob3Zlci1lZWstYTE6aG92ZXIgc3ZnLCAuYmFja2dyb3VuZC0taG92ZXItZWVrLWExOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICM1OGFiMzI7XG59XG4uYmFja2dyb3VuZC0taG92ZXItZWVrLWEyOmhvdmVyLCAuYmFja2dyb3VuZC0taG92ZXItZWVrLWEyOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAxOTAzOTtcbn1cbi5iYWNrZ3JvdW5kLS1ob3Zlci1lZWstYTI6aG92ZXIgc3ZnLCAuYmFja2dyb3VuZC0taG92ZXItZWVrLWEyOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICMwMTkwMzk7XG59XG4uYmFja2dyb3VuZC0taG92ZXItZWVrLWI6aG92ZXIsIC5iYWNrZ3JvdW5kLS1ob3Zlci1lZWstYjpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZGVhMTQ7XG59XG4uYmFja2dyb3VuZC0taG92ZXItZWVrLWI6aG92ZXIgc3ZnLCAuYmFja2dyb3VuZC0taG92ZXItZWVrLWI6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogI2ZkZWExNDtcbn1cbi5iYWNrZ3JvdW5kLS1ob3Zlci1lZWstYzpob3ZlciwgLmJhY2tncm91bmQtLWhvdmVyLWVlay1jOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZkY2IwMDtcbn1cbi5iYWNrZ3JvdW5kLS1ob3Zlci1lZWstYzpob3ZlciBzdmcsIC5iYWNrZ3JvdW5kLS1ob3Zlci1lZWstYzpmb2N1cyBzdmcge1xuICBmaWxsOiAjZmRjYjAwO1xufVxuLmJhY2tncm91bmQtLWhvdmVyLWVlay1kOmhvdmVyLCAuYmFja2dyb3VuZC0taG92ZXItZWVrLWQ6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjE5MzA1O1xufVxuLmJhY2tncm91bmQtLWhvdmVyLWVlay1kOmhvdmVyIHN2ZywgLmJhY2tncm91bmQtLWhvdmVyLWVlay1kOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICNmMTkzMDU7XG59XG4uYmFja2dyb3VuZC0taG92ZXItZWVrLWU6aG92ZXIsIC5iYWNrZ3JvdW5kLS1ob3Zlci1lZWstZTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlMDA3MWI7XG59XG4uYmFja2dyb3VuZC0taG92ZXItZWVrLWU6aG92ZXIgc3ZnLCAuYmFja2dyb3VuZC0taG92ZXItZWVrLWU6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogI2UwMDcxYjtcbn1cbi5iYWNrZ3JvdW5kLS1ncmFkaWVudC1yYWRpYWwtbGlnaHQge1xuICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoZWxsaXBzZSBhdCBjZW50ZXIsICNmZmYgNDAlLCAjZWNlY2VjIDEwMCUpO1xufVxuLmJhY2tncm91bmQtLWdyYWRpZW50LXJhZGlhbC1kYXJrIHtcbiAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGVsbGlwc2UgYXQgY2VudGVyLCAjNmY2ZjZmIDI4JSwgIzRiNGI0ZCAxMDAlKTtcbn1cbi5iYWNrZ3JvdW5kLS1ncmFkaWVudC1saW5lYXItd2hpdGUtdHJhbnNwYXJlbnQge1xuICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCBib3R0b20sIGxlZnQgdG9wLCBjb2xvci1zdG9wKDElLCAjZmZmKSwgdG8ocmdiYSgyNTUsIDI1NSwgMjU1LCAwKSkpO1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMGRlZywgI2ZmZiAxJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSAxMDAlKTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmJvcmRlciB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XG59XG4uYm9yZGVyLS1yYWRpdXMtY2lyY2xlIHtcbiAgYm9yZGVyLXJhZGl1czogOTk5OXB4O1xufVxuLmJvcmRlci0tdGV4dCB7XG4gIGJvcmRlci1jb2xvcjogIzRiNGI0ZDtcbn1cbi5ib3JkZXItLXdoaXRlIHtcbiAgYm9yZGVyLWNvbG9yOiAjZmZmO1xufVxuLmJvcmRlci0tbWFpbiB7XG4gIGJvcmRlci1jb2xvcjogI2ZlY2MwMDtcbn1cbi5ib3JkZXItLWFsdCB7XG4gIGJvcmRlci1jb2xvcjogIzRiNGI0ZDtcbn1cbi5ib3JkZXItLWRhcmsge1xuICBib3JkZXItY29sb3I6ICMxYTE3MWI7XG59XG4uYm9yZGVyLS1ibGFjayB7XG4gIGJvcmRlci1jb2xvcjogIzAwMDtcbn1cbi5ib3JkZXItLXRyYW5zcGFyZW50IHtcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xufVxuLmJvcmRlci0tb3ZlcmxheSB7XG4gIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpO1xufVxuLmJvcmRlci0tY29udHJvbHMtb3ZlcmxheSB7XG4gIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpO1xufVxuLmJvcmRlci0tZ3JheS0xIHtcbiAgYm9yZGVyLWNvbG9yOiAjZWNlY2VjO1xufVxuLmJvcmRlci0tZ3JheS0yIHtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xufVxuLmJvcmRlci0tZ3JheS0zIHtcbiAgYm9yZGVyLWNvbG9yOiAjYjJiMmIyO1xufVxuLmJvcmRlci0tZ3JheS00IHtcbiAgYm9yZGVyLWNvbG9yOiAjOTI5MjkyO1xufVxuLmJvcmRlci0tZ3JheS01IHtcbiAgYm9yZGVyLWNvbG9yOiAjNmY2ZjZmO1xufVxuLmJvcmRlci0tZ3JheS02IHtcbiAgYm9yZGVyLWNvbG9yOiAjNGI0YjRkO1xufVxuLmJvcmRlci0tZ3JheS03IHtcbiAgYm9yZGVyLWNvbG9yOiAjMWExNzFiO1xufVxuLmJvcmRlci0tcmVkLTEge1xuICBib3JkZXItY29sb3I6ICNlMzIyMTM7XG59XG4uYm9yZGVyLS1yZWQtMiB7XG4gIGJvcmRlci1jb2xvcjogI2UxMzA2Yztcbn1cbi5ib3JkZXItLXJlZC0zIHtcbiAgYm9yZGVyLWNvbG9yOiAjZGQxYTE2O1xufVxuLmJvcmRlci0tZmFjZWJvb2sge1xuICBib3JkZXItY29sb3I6ICMzYjU5OTg7XG59XG4uYm9yZGVyLS10d2l0dGVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjMDA3N2I1O1xufVxuLmJvcmRlci0tZWVrLWEge1xuICBib3JkZXItY29sb3I6ICNhZmM3MGQ7XG59XG4uYm9yZGVyLS1lZWstYTEge1xuICBib3JkZXItY29sb3I6ICM1OGFiMzI7XG59XG4uYm9yZGVyLS1lZWstYTIge1xuICBib3JkZXItY29sb3I6ICMwMTkwMzk7XG59XG4uYm9yZGVyLS1lZWstYiB7XG4gIGJvcmRlci1jb2xvcjogI2ZkZWExNDtcbn1cbi5ib3JkZXItLWVlay1jIHtcbiAgYm9yZGVyLWNvbG9yOiAjZmRjYjAwO1xufVxuLmJvcmRlci0tZWVrLWQge1xuICBib3JkZXItY29sb3I6ICNmMTkzMDU7XG59XG4uYm9yZGVyLS1lZWstZSB7XG4gIGJvcmRlci1jb2xvcjogI2UwMDcxYjtcbn1cbi5ib3JkZXItLW1kIHtcbiAgYm9yZGVyLXdpZHRoOiAycHg7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5oZWFkbGluZSB7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGZvbnQtc2l6ZTogMi40cmVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjRyZW07XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG59XG4uaGVhZGxpbmUtLXByb2R1Y3QtbmFtZSB7XG4gIC1tcy13b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLWJsb2NrLW5vLWR1cGxpY2F0ZS1wcm9wZXJ0aWVzICovXG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIC1tcy1oeXBoZW5zOiBhdXRvO1xuICAgICAgaHlwaGVuczogYXV0bztcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgZm9udC1zaXplOiAxLjJyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG4uaGVhZGxpbmUtLWh5cGhlbnMtbWFudWFsIHtcbiAgLW1zLWh5cGhlbnM6IG1hbnVhbDtcbiAgICAgIGh5cGhlbnM6IG1hbnVhbDtcbn1cbi5oZWFkbGluZS0taHlwaGVucy1hdXRvIHtcbiAgLW1zLWh5cGhlbnM6IGF1dG87XG4gICAgICBoeXBoZW5zOiBhdXRvO1xufVxuLmhlYWRsaW5lLS1uby1zcGFjaW5nIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuLmhlYWRsaW5lLS11cHBlcmNhc2Uge1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuLmhlYWRsaW5lLS11bmRlcmxpbmUge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5oZWFkbGluZS0tY291bnRyeS1saXN0IHtcbiAgbWFyZ2luLWxlZnQ6IDFyZW07XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4uaGVhZGxpbmUtLXNtYWxsIHtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG59XG4uaGVhZGxpbmUtLWRlZmF1bHQge1xuICBmb250LXNpemU6IDFyZW07XG59XG4uaGVhZGxpbmUtLW1lZGl1bS1zbWFsbCB7XG4gIGZvbnQtc2l6ZTogMS4wNjY2NjY2NjY3cmVtO1xufVxuLmhlYWRsaW5lLS1tZWRpdW0ge1xuICBmb250LXNpemU6IDEuMnJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbn1cbi5oZWFkbGluZS0td2hpdGUge1xuICBjb2xvcjogI2ZmZjtcbn1cbi5oZWFkbGluZS0tYmxhY2sge1xuICBjb2xvcjogIzAwMDtcbn1cbi5oZWFkbGluZS0tZnctbWVkaXVtIHtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5oZWFkbGluZS0tYm9sZCB7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG4uaGVhZGxpbmUtLWgyIHtcbiAgZm9udC1zaXplOiAycmVtO1xufVxuLmhlYWRsaW5lLS1oMyB7XG4gIGZvbnQtc2l6ZTogMS40NjY2NjY2NjY3cmVtO1xufVxuLmhlYWRsaW5lLS1oNCB7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xufVxuLmhlYWRsaW5lLS1oNSB7XG4gIGZvbnQtc2l6ZTogMS4wNjY2NjY2NjY3cmVtO1xufVxuLmhlYWRsaW5lLS1oNiB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMTtcbiAgbWFyZ2luOiAwO1xufVxuLmhlYWRsaW5lLS1zdHJvbmcsIC5oZWFkbGluZS0tc3BhbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmhlYWRsaW5lLS1saC0xIHtcbiAgbGluZS1oZWlnaHQ6IDEuMTtcbn1cbi5oZWFkbGluZS0tbGgtMiB7XG4gIGxpbmUtaGVpZ2h0OiAxLjI7XG59XG4uaGVhZGxpbmUtLWxoLTQge1xuICBsaW5lLWhlaWdodDogMS42O1xufVxuLmhlYWRsaW5lLS1saC02IHtcbiAgbGluZS1oZWlnaHQ6IDEuOTtcbn1cbi5oZWFkbGluZS0tY2VudGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5oZWFkbGluZS0tcmlnaHQge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbi5oZWFkbGluZS0tbGVmdCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4uaGVhZGxpbmUtLWp1c3RpZnkge1xuICB0ZXh0LWFsaWduOiBqdXN0aWZ5O1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ubGluZSB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmxpbmUtLXllbGxvdyB7XG4gIGJvcmRlci1jb2xvcjogI2ZlY2MwMDtcbn1cbi5saW5lLS1saWdodC1ncmF5IHtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xufVxuLmxpbmUtLWRhcmstZ3JheSB7XG4gIGJvcmRlci1jb2xvcjogIzRiNGI0ZDtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLm1hcmtkb3duIHVsLFxuLm1hcmtkb3duIG9sIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbn1cbi5tYXJrZG93biB1bCBsaSxcbi5tYXJrZG93biBvbCBsaSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGluZS1oZWlnaHQ6IDI7XG59XG4ubWFya2Rvd24gdWwgbGkge1xuICBwYWRkaW5nLWxlZnQ6IDEuNXJlbTtcbn1cbi5tYXJrZG93biB1bCBsaTo6YmVmb3JlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBjb250ZW50OiBcIuKAolwiO1xuICBmb250LXNpemU6IDEuMDY2NjY2NjY2N3JlbTtcbiAgdG9wOiAtMC4xMzMzMzMzMzMzcmVtO1xuICBsZWZ0OiAwLjVyZW07XG59XG4ubWFya2Rvd24gb2wge1xuICBwYWRkaW5nLWxlZnQ6IDJyZW07XG59XG4ubWFya2Rvd24gaDEge1xuICBmb250LXNpemU6IDIuMjY2NjY2NjY2N3JlbTtcbiAgbGluZS1oZWlnaHQ6IDIuNjY2NjY2NjY2N3JlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cbi5tYXJrZG93biBoMiB7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbiAgbGluZS1oZWlnaHQ6IDIuMjY2NjY2NjY2N3JlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5tYXJrZG93biBoMyB7XG4gIGZvbnQtc2l6ZTogMS42cmVtO1xuICBsaW5lLWhlaWdodDogMnJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cbi5tYXJrZG93biBoNCB7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xuICBsaW5lLWhlaWdodDogMS4zMzMzMzMzMzMzcmVtO1xuICBmb250LXdlaWdodDogNzAwO1xufVxuLm1hcmtkb3duIGg1IHtcbiAgZm9udC1zaXplOiAxLjA2NjY2NjY2NjdyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG4ubWFya2Rvd24gaDYge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDEuMTtcbiAgbWFyZ2luOiAwO1xufVxuLm1hcmtkb3duIGgxLFxuLm1hcmtkb3duIGgyLFxuLm1hcmtkb3duIGgzLFxuLm1hcmtkb3duIGg0LFxuLm1hcmtkb3duIGg1LFxuLm1hcmtkb3duIGg2IHtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cbi5tYXJrZG93biBhIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4ubWFya2Rvd24gYTpob3ZlciB7XG4gIGNvbG9yOiAjZmVjYzAwO1xufVxuLm1hcmtkb3duIHAge1xuICBtYXJnaW46IDFyZW0gMDtcbn1cbi5tYXJrZG93bi0tbGVmdCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4ubWFya2Rvd24tLWNlbnRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5tYXJrZG93bi0tcmlnaHQge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbi5tYXJrZG93bi0tanVzdGlmeSB7XG4gIHRleHQtYWxpZ246IGp1c3RpZnk7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5vdmVybGF5LWJsb2NrIHtcbiAgYmFja2dyb3VuZDogcmdiYSgxMTEsIDExMSwgMTExLCAwLjQpO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogMzUwO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBvcGFjaXR5OiAwO1xuICAtd2Via2l0LXRyYW5zaXRpb246IHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQsIG9wYWNpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQsIG9wYWNpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwMjNweCkge1xuICAub3ZlcmxheS1ibG9jayB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLm92ZXJsYXktYmxvY2stLWlzLXNob3duIHtcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgb3BhY2l0eTogMTtcbn1cbi5vdmVybGF5LWJsb2NrLS1uby1zZWFyY2gsIC5vdmVybGF5LWJsb2NrLS1uby1hZ2VudC11c2VyIHtcbiAgei1pbmRleDogNjk5O1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uc3RvcnlibG9rLXN0dWIgLmpzb24tY29udGFpbmVyIHtcbiAgcGFkZGluZzogMXJlbTtcbn1cbi5zdG9yeWJsb2stc3R1YiAuanNvbi1jb250YWluZXIgLmNvbXBvbmVudC1uYW1lIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4uc3RvcnlibG9rLXN0dWIgLmpzb24tY29udGFpbmVyIC5kaXNjbG9zdXJlIHtcbiAgY29sb3I6ICMwOWIzYWY7XG4gIGZvbnQtc2l6ZTogMTUwJTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnN2Zy1pY29uIHtcbiAgZmlsbDogbm9uZTtcbiAgd2lkdGg6IGF1dG87XG4gIGhlaWdodDogYXV0bztcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiB1bnNldDtcbiAgICAgLW1vei11c2VyLXNlbGVjdDogdW5zZXQ7XG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IHVuc2V0O1xuICAgICAgICAgIHVzZXItc2VsZWN0OiB1bnNldDtcbn1cbi5zdmctaWNvbiBbY2xhc3NePXBhdGhdLFxuLnN2Zy1pY29uIFtjbGFzcyo9cGF0aF0ge1xuICBmb250LXNpemU6IDJyZW07XG4gIHdpZHRoOiBhdXRvO1xufVxuLnN2Zy1pY29uLS1pcy1zcHJpdGUge1xuICBmaWxsOiBjdXJyZW50Q29sb3I7XG4gIHdpZHRoOiAxcmVtO1xuICBoZWlnaHQ6IDFyZW07XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG4uc3ZnLWljb24tLXRlY2huaWNhbCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbi5zdmctaWNvbi0tYmVsZ2l1bSB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDQuNjY2NjY2NjY2N3JlbTtcbn1cbi5zdmctaWNvbi0tbG9nbyB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDQuNjY2NjY2NjY2N3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnN2Zy1pY29uLS1sb2dvIHtcbiAgICBoZWlnaHQ6IDdyZW07XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICB9XG59XG4uc3ZnLWljb24tLWNoZWNrb3V0IHtcbiAgd2lkdGg6IDcuMjY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAyLjEzMzMzMzMzMzNyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zdmctaWNvbi0tY2hlY2tvdXQge1xuICAgIHdpZHRoOiAxMS4xMzMzMzMzMzMzcmVtO1xuICAgIGhlaWdodDogNHJlbTtcbiAgfVxufVxuLnN2Zy1pY29uLS1oZWFkZXItY2hlY2sge1xuICB3aWR0aDogMC44cmVtO1xuICBoZWlnaHQ6IDAuNnJlbTtcbiAgbWFyZ2luOiAtMC4xMzMzMzMzMzMzcmVtIDAuNnJlbSAwIDA7XG59XG4uc3ZnLWljb24tLXByb2dyZXNzLWNoZWNrIHtcbiAgd2lkdGg6IDAuNDY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAwLjMzMzMzMzMzMzNyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5zdmctaWNvbi0tcHJvZ3Jlc3MtY2hlY2sge1xuICAgIHdpZHRoOiAwLjY2NjY2NjY2NjdyZW07XG4gICAgaGVpZ2h0OiAwLjUzMzMzMzMzMzNyZW07XG4gIH1cbn1cbi5zdmctaWNvbi0tcXVpY2stb3JkZXIge1xuICB3aWR0aDogMS40cmVtO1xuICBoZWlnaHQ6IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zdmctaWNvbi0tcXVpY2stb3JkZXIge1xuICAgIHdpZHRoOiAyLjEzMzMzMzMzMzNyZW07XG4gICAgaGVpZ2h0OiAxLjI2NjY2NjY2NjdyZW07XG4gICAgbWFyZ2luLXRvcDogMC42NjY2NjY2NjY3cmVtO1xuICB9XG59XG4uc3ZnLWljb24tLWluZm8tYm94IHtcbiAgZm9udC1zaXplOiAxLjY2NjY2NjY2NjdyZW07XG59XG4uc3ZnLWljb24tLXF1aWNrLW9yZGVyLWRlbGV0ZS1yb3cge1xuICB3aWR0aDogMC45MzMzMzMzMzMzcmVtO1xuICBoZWlnaHQ6IDFyZW07XG4gIGZpbGw6ICNkMGQwZDA7XG59XG4uc3ZnLWljb24tLWhlYWRlci1zaG9wcGluZy1saXN0IHtcbiAgd2lkdGg6IDAuODY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAwLjhyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zdmctaWNvbi0taGVhZGVyLXNob3BwaW5nLWxpc3Qge1xuICAgIHdpZHRoOiAxLjEzMzMzMzMzMzNyZW07XG4gICAgaGVpZ2h0OiAxLjA2NjY2NjY2NjdyZW07XG4gICAgbWFyZ2luLXRvcDogMC42NjY2NjY2NjY3cmVtO1xuICB9XG59XG4uc3ZnLWljb24tLWNhcnQge1xuICB3aWR0aDogMS4zMzMzMzMzMzMzcmVtO1xuICBoZWlnaHQ6IDEuMTMzMzMzMzMzM3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnN2Zy1pY29uLS1jYXJ0IHtcbiAgICB3aWR0aDogMnJlbTtcbiAgICBoZWlnaHQ6IDEuNzMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLnN2Zy1pY29uLS1kZWFsZXItc2VhcmNoLXJlZ2lzdHJhdGlvbiB7XG4gIGZvbnQtc2l6ZTogMS42NjY2NjY2NjY3cmVtO1xuICBtYXJnaW4tcmlnaHQ6IDAuNzVyZW07XG59XG4uc3ZnLWljb24tLWNyb3NzIHtcbiAgd2lkdGg6IDAuNjY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAwLjY2NjY2NjY2NjdyZW07XG59XG4uc3ZnLWljb24tLXJldmVyc2Uge1xuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbn1cbi5zdmctaWNvbi0tdG9nZ2xlci1jcm9zcyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDAuNjY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAwLjY2NjY2NjY2NjdyZW07XG59XG4uc3ZnLWljb24tLXRvZ2dsZXItY3Jvc3M6OmJlZm9yZSwgLnN2Zy1pY29uLS10b2dnbGVyLWNyb3NzOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzZmNmY2Zjtcbn1cbi5zdmctaWNvbi0tdG9nZ2xlci1jcm9zczo6YmVmb3JlIHtcbiAgaGVpZ2h0OiAwLjEzMzMzMzMzMzNyZW07XG4gIHdpZHRoOiAxMDAlO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogMDtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc3ZnLWljb24tLXRvZ2dsZXItY3Jvc3M6OmJlZm9yZSB7XG4gICAgaGVpZ2h0OiAwLjJyZW07XG4gIH1cbn1cbi5zdmctaWNvbi0tdG9nZ2xlci1jcm9zczo6YWZ0ZXIge1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAwLjEzMzMzMzMzMzNyZW07XG4gIHRvcDogMDtcbiAgbGVmdDogNTAlO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zdmctaWNvbi0tdG9nZ2xlci1jcm9zczo6YWZ0ZXIge1xuICAgIHdpZHRoOiAwLjJyZW07XG4gIH1cbn1cbi5hY3RpdmUgLnN2Zy1pY29uLS10b2dnbGVyLWNyb3NzOjphZnRlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uc3ZnLWljb24tLXRvZ2dsZXItY3Jvc3MtdGhpbjo6YmVmb3JlIHtcbiAgaGVpZ2h0OiAwLjEzMzMzMzMzMzNyZW07XG59XG4uc3ZnLWljb24tLXRvZ2dsZXItY3Jvc3MtdGhpbjo6YWZ0ZXIge1xuICB3aWR0aDogMC4xMzMzMzMzMzMzcmVtO1xufVxuLnN2Zy1pY29uLS1jYXJ0LXBsdXMge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAxLjczMzMzMzMzMzNyZW07XG4gIGhlaWdodDogMS41MzMzMzMzMzMzcmVtO1xuICBtYXJnaW46IC0wLjRyZW0gMC44cmVtIC0wLjEzMzMzMzMzMzNyZW0gMDtcbn1cbi5zdmctaWNvbi0tdG9nZ2xlci1jcm9zcy1saW5rOjpiZWZvcmUsIC5zdmctaWNvbi0tdG9nZ2xlci1jcm9zcy1saW5rOjphZnRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNiMmIyYjI7XG59XG4uc3ZnLWljb24tLWxpbmsge1xuICAtd2Via2l0LXRyYW5zaXRpb246IGNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgY29sb3I6ICNkMGQwZDA7XG4gIG1hcmdpbi1yaWdodDogMC40cmVtO1xufVxuLnN2Zy1pY29uLS1zaGlwbWVudCB7XG4gIHdpZHRoOiA1LjUzMzMzMzMzMzNyZW07XG59XG4uc3ZnLWljb24tLWRobC1sb2dvIHtcbiAgd2lkdGg6IDQuODY2NjY2NjY2N3JlbTtcbn1cbi5zdmctaWNvbi0taW52b2ljZS1sb2dvIHtcbiAgd2lkdGg6IDMuNDY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAxLjMzMzMzMzMzMzNyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zdmctaWNvbi0taW52b2ljZS1sb2dvIHtcbiAgICB3aWR0aDogNS41MzMzMzMzMzMzcmVtO1xuICAgIGhlaWdodDogMS44NjY2NjY2NjY3cmVtO1xuICB9XG59XG4uc3ZnLWljb24tLWludm9pY2UtbG9nby1zbWFsbCB7XG4gIHdpZHRoOiAzLjY2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMS40NjY2NjY2NjY3cmVtO1xufVxuLnN2Zy1pY29uLS1wYXltZW50LWxvZ28ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMS44cmVtO1xuICByaWdodDogMS4zMzMzMzMzMzMzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc3ZnLWljb24tLXBheW1lbnQtbG9nbyB7XG4gICAgdG9wOiAxLjhyZW07XG4gICAgcmlnaHQ6IDJyZW07XG4gIH1cbn1cbi5zdmctaWNvbi0tc3VtbWFyeS1zaGlwcGluZyB7XG4gIHdpZHRoOiAzLjUzMzMzMzMzMzNyZW07XG59XG4uc3ZnLWljb24tLW92ZXJ2aWV3IHtcbiAgd2lkdGg6IDEuMTMzMzMzMzMzM3JlbTtcbiAgaGVpZ2h0OiAxLjA2NjY2NjY2NjdyZW07XG59XG4uc3ZnLWljb24tLXVzZXJzIHtcbiAgd2lkdGg6IDEuOTMzMzMzMzMzM3JlbTtcbiAgaGVpZ2h0OiAxLjI2NjY2NjY2NjdyZW07XG59XG4uc3ZnLWljb24tLWJ1c2luZXNzLXVuaXQge1xuICB3aWR0aDogMS40NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDEuNDY2NjY2NjY2N3JlbTtcbn1cbi5zdmctaWNvbi0tcm9sZSB7XG4gIGhlaWdodDogMC45MzMzMzMzMzMzcmVtO1xufVxuLnN2Zy1pY29uLS1wbHVzLXNtYWxsIHtcbiAgd2lkdGg6IDAuNjY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAwLjY2NjY2NjY2NjdyZW07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAtMC4wNjY2NjY2NjY3cmVtO1xufVxuLnN2Zy1pY29uLS1hZGQtdG8tbGlzdCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAwLjA2NjY2NjY2NjdyZW07XG4gIHdpZHRoOiAxLjczMzMzMzMzMzNyZW07XG4gIGhlaWdodDogMS43MzMzMzMzMzMzcmVtO1xufVxuLnN2Zy1pY29uLS1zdWNjZXNzIHtcbiAgd2lkdGg6IDhyZW07XG4gIGhlaWdodDogOHJlbTtcbiAgbWFyZ2luLWJvdHRvbTogLTEuNDY2NjY2NjY2N3JlbTtcbn1cbi5zdmctaWNvbi0tZm9vdGVyIHtcbiAgaGVpZ2h0OiAxLjg2NjY2NjY2NjdyZW07XG4gIHdpZHRoOiA2LjJyZW07XG59XG4uc3ZnLWljb24tLWludm9pY2UtbG9nby1mb290ZXIge1xuICB3aWR0aDogNC44NjY2NjY2NjY3cmVtO1xufVxuLnN2Zy1pY29uLS1wYXktcGFsLWxvZ28tZm9vdGVyIHtcbiAgd2lkdGg6IDQuMjY2NjY2NjY2N3JlbTtcbn1cbi5zdmctaWNvbi0ta2xhcm5hLWxvZ28tZm9vdGVyIHtcbiAgd2lkdGg6IDQuNTMzMzMzMzMzM3JlbTtcbn1cbi5zdmctaWNvbi0tZGhsLWxvZ28tZm9vdGVyIHtcbiAgd2lkdGg6IDUuMDY2NjY2NjY2N3JlbTtcbn1cbi5zdmctaWNvbi0tY29weXJpZ2h0IHtcbiAgd2lkdGg6IDcuMDY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAzLjJyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zdmctaWNvbi0tdmlldy1tb2RlLXN3aXRjaCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwLjZyZW07XG4gIH1cbn1cbi5zdmctaWNvbi0tcmVzZXQge1xuICAtd2Via2l0LXRyYW5zaXRpb246IGNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBjb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgbWFyZ2luLXJpZ2h0OiAwLjUzMzMzMzMzMzNyZW07XG4gIGNvbG9yOiAjNmY2ZjZmO1xufVxuLnN2Zy1pY29uLS1jaGV2cm9uIHtcbiAgd2lkdGg6IDAuNjY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAwLjY2NjY2NjY2NjdyZW07XG59XG4uc3ZnLWljb24tLWNyZWF0ZS1saXN0IHtcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgaGVpZ2h0OiAxLjJyZW07XG4gIHdpZHRoOiAxLjJyZW07XG59XG4uc3ZnLWljb24tLWNyZWF0ZS1uZXctY2FydCB7XG4gIHdpZHRoOiAxLjZyZW07XG4gIGhlaWdodDogMS4ycmVtO1xuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xufVxuLnN2Zy1pY29uLS10cm9sbGV5IHtcbiAgd2lkdGg6IDEuMzMzMzMzMzMzM3JlbTtcbn1cbi5zdmctaWNvbi0tdGl0bGUge1xuICB3aWR0aDogMi4zMzMzMzMzMzMzcmVtO1xuICBoZWlnaHQ6IDEuNzMzMzMzMzMzM3JlbTtcbn1cbi5zdmctaWNvbi0tc20tbGctcmVndWxhciB7XG4gIHdpZHRoOiAxLjA2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMS4wNjY2NjY2NjY3cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc3ZnLWljb24tLXNtLWxnLXJlZ3VsYXIge1xuICAgIHdpZHRoOiAxLjMzMzMzMzMzMzNyZW07XG4gICAgaGVpZ2h0OiAxLjMzMzMzMzMzMzNyZW07XG4gIH1cbn1cbi5zdmctaWNvbi0tdmFsaWRhdGlvbi1tZXNzYWdlIHtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGZvbnQtc2l6ZTogMi40cmVtO1xuICBtYXJnaW4tcmlnaHQ6IDAuNXJlbTtcbn1cbi5zdmctaWNvbi0td2FybmluZy1tZXNzYWdlIHtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XG59XG4uc3ZnLWljb24tLXNtLWxnLWJpZ2dlciB7XG4gIHdpZHRoOiAxLjA2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMS4wNjY2NjY2NjY3cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc3ZnLWljb24tLXNtLWxnLWJpZ2dlciB7XG4gICAgd2lkdGg6IDEuNnJlbTtcbiAgICBoZWlnaHQ6IDEuNnJlbTtcbiAgfVxufVxuLnN2Zy1pY29uLS1icm93c2UtZmlsZSB7XG4gIHdpZHRoOiAxLjg2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMS44NjY2NjY2NjY3cmVtO1xufVxuLnN2Zy1pY29uLS1kb3dubG9hZC1maWxlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAycmVtO1xuICBoZWlnaHQ6IDJyZW07XG59XG4uc3ZnLWljb24tLXJlbW92ZS1maWxlIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIG1hcmdpbjogLTAuMTMzMzMzMzMzM3JlbSAwIDAgMC4zMzMzMzMzMzMzcmVtO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uc3ZnLWljb24tLXJlbW92ZS1maWxlOmhvdmVyIHtcbiAgY29sb3I6ICM5MjkyOTI7XG59XG4uc3ZnLWljb24tLWNsb2NrIHtcbiAgd2lkdGg6IDAuOHJlbTtcbiAgaGVpZ2h0OiAwLjhyZW07XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi50ZXh0LS11cHBlcmNhc2Uge1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuLnRleHQtLXRleHQge1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi50ZXh0LS13aGl0ZSB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLnRleHQtLW1haW4ge1xuICBjb2xvcjogI2ZlY2MwMDtcbn1cbi50ZXh0LS1hbHQge1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi50ZXh0LS1kYXJrIHtcbiAgY29sb3I6ICMxYTE3MWI7XG59XG4udGV4dC0tYmxhY2sge1xuICBjb2xvcjogIzAwMDtcbn1cbi50ZXh0LS10cmFuc3BhcmVudCB7XG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xufVxuLnRleHQtLW92ZXJsYXkge1xuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpO1xufVxuLnRleHQtLWNvbnRyb2xzLW92ZXJsYXkge1xuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpO1xufVxuLnRleHQtLWdyYXktMSB7XG4gIGNvbG9yOiAjZWNlY2VjO1xufVxuLnRleHQtLWdyYXktMiB7XG4gIGNvbG9yOiAjZDBkMGQwO1xufVxuLnRleHQtLWdyYXktMyB7XG4gIGNvbG9yOiAjYjJiMmIyO1xufVxuLnRleHQtLWdyYXktNCB7XG4gIGNvbG9yOiAjOTI5MjkyO1xufVxuLnRleHQtLWdyYXktNSB7XG4gIGNvbG9yOiAjNmY2ZjZmO1xufVxuLnRleHQtLWdyYXktNiB7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLnRleHQtLWdyYXktNyB7XG4gIGNvbG9yOiAjMWExNzFiO1xufVxuLnRleHQtLXJlZC0xIHtcbiAgY29sb3I6ICNlMzIyMTM7XG59XG4udGV4dC0tcmVkLTIge1xuICBjb2xvcjogI2UxMzA2Yztcbn1cbi50ZXh0LS1yZWQtMyB7XG4gIGNvbG9yOiAjZGQxYTE2O1xufVxuLnRleHQtLWZhY2Vib29rIHtcbiAgY29sb3I6ICMzYjU5OTg7XG59XG4udGV4dC0tdHdpdHRlciB7XG4gIGNvbG9yOiAjMDA3N2I1O1xufVxuLnRleHQtLWVlay1hIHtcbiAgY29sb3I6ICNhZmM3MGQ7XG59XG4udGV4dC0tZWVrLWExIHtcbiAgY29sb3I6ICM1OGFiMzI7XG59XG4udGV4dC0tZWVrLWEyIHtcbiAgY29sb3I6ICMwMTkwMzk7XG59XG4udGV4dC0tZWVrLWIge1xuICBjb2xvcjogI2ZkZWExNDtcbn1cbi50ZXh0LS1lZWstYyB7XG4gIGNvbG9yOiAjZmRjYjAwO1xufVxuLnRleHQtLWVlay1kIHtcbiAgY29sb3I6ICNmMTkzMDU7XG59XG4udGV4dC0tZWVrLWUge1xuICBjb2xvcjogI2UwMDcxYjtcbn1cbi50ZXh0LS1zdWNjZXNzIHtcbiAgY29sb3I6ICMwMTkwMzk7XG59XG4udGV4dC0tc3VjY2Vzcy1saWdodCB7XG4gIGNvbG9yOiAjYWJkMThiO1xufVxuLnRleHQtLXdhcm5pbmcge1xuICBjb2xvcjogI2U4OWMzMDtcbn1cbi50ZXh0LS1hbGVydCB7XG4gIGNvbG9yOiAjZTMyMjEzO1xufVxuLnRleHQtLWluZm8ge1xuICBjb2xvcjogI2ZlY2MwMDtcbn1cbi50ZXh0LS1uZXV0cmFsIHtcbiAgY29sb3I6ICM5MjkyOTI7XG59XG4udGV4dC0tZnctbGlnaHQge1xuICBmb250LXdlaWdodDogMzAwO1xufVxuLnRleHQtLWZ3LXJlZ3VsYXIge1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLnRleHQtLWZ3LW1lZGl1bSB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG4udGV4dC0tZnctYm9sZCB7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG4udGV4dC0tZnMtMSB7XG4gIGZvbnQtc2l6ZTogMi40cmVtO1xufVxuLnRleHQtLWZzLTIge1xuICBmb250LXNpemU6IDJyZW07XG59XG4udGV4dC0tZnMtMyB7XG4gIGZvbnQtc2l6ZTogMS40NjY2NjY2NjY3cmVtO1xufVxuLnRleHQtLWZzLTQge1xuICBmb250LXNpemU6IDEuMnJlbTtcbn1cbi50ZXh0LS1mcy01IHtcbiAgZm9udC1zaXplOiAxcmVtO1xufVxuLnRleHQtLWZzLTYge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbn1cbi50ZXh0LS1mcy03IHtcbiAgZm9udC1zaXplOiAwLjhyZW07XG59XG4udGV4dC0tZnMtYmlnIHtcbiAgZm9udC1zaXplOiAyLjRyZW07XG59XG4udGV4dC0tZnMtbWVkaXVtLWJpZyB7XG4gIGZvbnQtc2l6ZTogMS42NjY2NjY2NjY3cmVtO1xufVxuLnRleHQtLWZzLW1lZGl1bSB7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xufVxuLnRleHQtLWZzLW1lZGl1bS1zbWFsbCB7XG4gIGZvbnQtc2l6ZTogMS4wNjY2NjY2NjY3cmVtO1xufVxuLnRleHQtLWZzLWRlZmF1bHQge1xuICBmb250LXNpemU6IDFyZW07XG59XG4udGV4dC0tZnMtc21hbGwge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbn1cbi50ZXh0LS1mcy10aW55IHtcbiAgZm9udC1zaXplOiAwLjhyZW07XG59XG4udGV4dC0tZnMtc3RvcnlibG9rLWgxIHtcbiAgZm9udC1zaXplOiAyLjI2NjY2NjY2NjdyZW07XG59XG4udGV4dC0tZnMtc3RvcnlibG9rLWgyIHtcbiAgZm9udC1zaXplOiAycmVtO1xufVxuLnRleHQtLWZzLXN0b3J5Ymxvay1oMyB7XG4gIGZvbnQtc2l6ZTogMS42cmVtO1xufVxuLnRleHQtLWZzLXN0b3J5Ymxvay1oNCB7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xufVxuLnRleHQtLWZzLXN0b3J5Ymxvay1oNSB7XG4gIGZvbnQtc2l6ZTogMS4wNjY2NjY2NjY3cmVtO1xufVxuLnRleHQtLWZzLXN0b3J5Ymxvay1kZWZhdWx0IHtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG59XG4udGV4dC0tZnMtc3RvcnlibG9rLW1lZGl1bSB7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xufVxuLnRleHQtLWZzLXN0b3J5Ymxvay1tZWRpdW0tc21hbGwge1xuICBmb250LXNpemU6IDEuMDY2NjY2NjY2N3JlbTtcbn1cbi50ZXh0LS1mcy1zdG9yeWJsb2stbWVkaXVtLWJpZyB7XG4gIGZvbnQtc2l6ZTogMS4zMzMzMzMzMzMzcmVtO1xufVxuLnRleHQtLWZzLXN0b3J5Ymxvay1zbWFsbCB7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xufVxuLnRleHQtLWZzLXN0b3J5Ymxvay10aW55IHtcbiAgZm9udC1zaXplOiAwLjczMzMzMzMzMzNyZW07XG59XG4udGV4dC0tZnMtc3RvcnlibG9rLWhlYWRsaW5lLWJpZyB7XG4gIGZvbnQtc2l6ZTogMi41MzMzMzMzMzMzcmVtO1xufVxuLnRleHQtLWNlbnRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmFic3RyYWN0LXRhYnMtZWxlbWVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5hYnN0cmFjdC10YWJzLWVsZW1lbnRfX25hdiB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gIGJvcmRlci1ib3R0b206IDAuMDY2NjY2NjY2N3JlbSBzb2xpZCAjZWNlY2VjO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuYWJzdHJhY3QtdGFicy1lbGVtZW50X19uYXYge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cbn1cbi5hYnN0cmFjdC10YWJzLWVsZW1lbnRfX25hdi1pdGVtIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDEwcHg7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxMHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xuICBwYWRkaW5nOiAwLjVyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB3aWR0aDogMTAwJTtcbn1cbi5hYnN0cmFjdC10YWJzLWVsZW1lbnRfX25hdi1pdGVtIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4uYWJzdHJhY3QtdGFicy1lbGVtZW50X19uYXYtaXRlbS5pcy0tZGlzYWJsZWQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogI2QwZDBkMDtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4uYWJzdHJhY3QtdGFicy1lbGVtZW50X19uYXYtaXRlbS5pcy0tZGlzYWJsZWQ6aG92ZXIge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLmFic3RyYWN0LXRhYnMtZWxlbWVudF9fbmF2LWl0ZW06bm90KDpsYXN0LWNoaWxkKSB7XG4gIG1hcmdpbi1yaWdodDogMC4wNjY2NjY2NjY3cmVtO1xufVxuLmFic3RyYWN0LXRhYnMtZWxlbWVudF9fbmF2LWl0ZW0gLmFic3RyYWN0LXRhYnMtZWxlbWVudF9fbGluayB7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbi5hYnN0cmFjdC10YWJzLWVsZW1lbnRfX25hdi1pdGVtIC5hYnN0cmFjdC10YWJzLWVsZW1lbnRfX2xpbms6aG92ZXIge1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5hYnN0cmFjdC10YWJzLWVsZW1lbnRfX25hdi1pdGVtLmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0YjRiNGQ7XG4gIGNvbG9yOiAjZmZmO1xuICBjb2xvcjogI2ZmZjtcbn1cbi5hYnN0cmFjdC10YWJzLWVsZW1lbnRfX25hdi1pdGVtLmFjdGl2ZSBzdmcge1xuICBmaWxsOiAjZmZmO1xufVxuLmFic3RyYWN0LXRhYnMtZWxlbWVudF9fbmF2LWl0ZW0uYWN0aXZlIC5hYnN0cmFjdC10YWJzLWVsZW1lbnRfX2xpbmsge1xuICBjb2xvcjogI2ZmZjtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4uYWJzdHJhY3QtdGFicy1lbGVtZW50X19uYXYtaXRlbS5hY3RpdmUgLmFic3RyYWN0LXRhYnMtZWxlbWVudF9fbGluazpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLmFic3RyYWN0LXRhYnMtZWxlbWVudF9fY29udGVudCB7XG4gIG1pbi1oZWlnaHQ6IDIuMTMzMzMzMzMzM3JlbTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmFic3RyYWN0LXRhYnMtZWxlbWVudF9fY29udGVudCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBtaW4taGVpZ2h0OiAwO1xuICB9XG59XG4uYWJzdHJhY3QtdGFicy1lbGVtZW50X19jb250ZW50OjpiZWZvcmUge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS10aXRsZSk7XG4gIHdpZHRoOiAxMDAlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7XG4gIGhlaWdodDogMy4zMzMzMzMzMzMzcmVtO1xuICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gIG1hcmdpbi1ib3R0b206IDAuNjY2NjY2NjY2N3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmFic3RyYWN0LXRhYnMtZWxlbWVudF9fY29udGVudDo6YmVmb3JlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4uYWJzdHJhY3QtdGFicy1lbGVtZW50X19jb250ZW50OjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXFxlOWU2XCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgY29sb3I6ICMwMDA7XG4gIHRvcDogMXJlbTtcbiAgcmlnaHQ6IDAuNjY2NjY2NjY2N3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmFic3RyYWN0LXRhYnMtZWxlbWVudF9fY29udGVudDo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi5hYnN0cmFjdC10YWJzLWVsZW1lbnRfX2NvbnRlbnQgPiAuYWJzdHJhY3QtdGFicy1lbGVtZW50X19jb250ZW50LWJvZHkge1xuICBkaXNwbGF5OiBub25lO1xufVxuLmFic3RyYWN0LXRhYnMtZWxlbWVudF9fY29udGVudC5hY3RpdmUge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5hYnN0cmFjdC10YWJzLWVsZW1lbnRfX2NvbnRlbnQuYWN0aXZlOjpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGI0YjRkO1xuICBjb2xvcjogI2ZmZjtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbi5hYnN0cmFjdC10YWJzLWVsZW1lbnRfX2NvbnRlbnQuYWN0aXZlOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXFxlYTNhXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgY29sb3I6ICNmZmY7XG4gIHRvcDogMXJlbTtcbiAgcmlnaHQ6IDAuNjY2NjY2NjY2N3JlbTtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5hYnN0cmFjdC10YWJzLWVsZW1lbnRfX2NvbnRlbnQuYWN0aXZlOjphZnRlciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLmFic3RyYWN0LXRhYnMtZWxlbWVudF9fY29udGVudC5hY3RpdmUgPiAuYWJzdHJhY3QtdGFicy1lbGVtZW50X19jb250ZW50LWJvZHkge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5zaWRlLWRyYXdlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogNzAxO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI1cHgpIHtcbiAgLnNpZGUtZHJhd2VyIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4uc2lkZS1kcmF3ZXJfX292ZXJsYXkge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBvcGFjaXR5OiAwO1xuICAtd2Via2l0LXRyYW5zaXRpb246IHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQsIG9wYWNpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQsIG9wYWNpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDExMSwgMTExLCAxMTEsIDAuNCk7XG59XG4uc2lkZS1kcmF3ZXJfX2RyYXdlciB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAycHggNXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAycHggNXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIG9wYWNpdHk6IDA7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogbGVmdCAyNTBtcyBlYXNlLWluLW91dCwgdmlzaWJpbGl0eSAyNTBtcyBlYXNlLWluLW91dCwgb3BhY2l0eSAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogbGVmdCAyNTBtcyBlYXNlLWluLW91dCwgdmlzaWJpbGl0eSAyNTBtcyBlYXNlLWluLW91dCwgb3BhY2l0eSAyNTBtcyBlYXNlLWluLW91dDtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAtMjVyZW07XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5zaWRlLWRyYXdlcl9fZHJhd2VyIHtcbiAgICB3aWR0aDogMjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnNpZGUtZHJhd2VyX19kcmF3ZXItLWxvZ2dlZCB7XG4gICAgcGFkZGluZy10b3A6IDMuMzMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLnNpZGUtZHJhd2VyX19ob2xkZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xuICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xufVxuLnNpZGUtZHJhd2VyX19uYXZpZ2F0aW9uLXRvcCB7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDJyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zaWRlLWRyYXdlcl9fbmF2aWdhdGlvbi10b3AtYWN0aW9ucyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLnNpZGUtZHJhd2VyX19jbG9zZS1yb3cge1xuICBib3JkZXItdG9wLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICNkMGQwZDA7XG4gIGxpbmUtaGVpZ2h0OiAzcmVtO1xufVxuLnNpZGUtZHJhd2VyX19jbG9zZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGVuZDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmb250LXNpemU6IDEuMzMzMzMzMzMzM3JlbTtcbiAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uc2lkZS1kcmF3ZXJfX2Nsb3NlIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4uc2lkZS1kcmF3ZXJfX2Nsb3NlIHN2ZyB7XG4gIHdpZHRoOiAxLjMzMzMzMzMzMzNyZW07XG4gIGhlaWdodDogMS4zMzMzMzMzMzMzcmVtO1xuICBtYXJnaW4tbGVmdDogMC41cmVtO1xufVxuLnNpZGUtZHJhd2VyX19jbG9zZS1sYWJlbCB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbn1cbi5zaWRlLWRyYXdlcl9fdXNlci1saW5rIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogZW5kO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGVuZDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gIHBhZGRpbmc6IDAuOHJlbSAwO1xuICBmb250LXdlaWdodDogNzAwO1xuICBsaW5lLWhlaWdodDogMS4wNjY2NjY2NjY3cmVtO1xuICBmb250LXNpemU6IDAuNjY2NjY2NjY2N3JlbTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDRyZW07XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG59XG4uc2lkZS1kcmF3ZXJfX3VzZXItbGluay1pY29uIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjY2NjY2NjY2NjdyZW07XG59XG4uc2lkZS1kcmF3ZXJfX25hdmlnYXRpb24ge1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXg6IDE7XG4gICAgICAgICAgZmxleDogMTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLnNpZGUtZHJhd2VyX19pbmZvIHtcbiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgcGFkZGluZy1ib3R0b206IDEuNjY2NjY2NjY2N3JlbTtcbn1cbi5zaWRlLWRyYXdlcl9fY29udGFjdCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAxLjA2NjY2NjY2NjdyZW0gMXJlbSAxLjA2NjY2NjY2NjdyZW0gNC4yNjY2NjY2NjY3cmVtO1xuICBib3JkZXItcmFkaXVzOiAwLjEzMzMzMzMzMzNyZW07XG4gIGJvcmRlcjogMC4wNjY2NjY2NjY3cmVtIHNvbGlkICNlY2VjZWM7XG4gIGNvbG9yOiAjZDBkMGQwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uc2lkZS1kcmF3ZXJfX2NvbnRhY3QtaWNvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMS4zMzMzMzMzMzMzcmVtO1xuICB0b3A6IDUwJTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuLnNpZGUtZHJhd2VyX19jb250YWN0LXRleHQge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjI7XG59XG4uc2lkZS1kcmF3ZXJfX2NvbnRhY3QtdGV4dC0td2VpZ2h0IHtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cbi5zaWRlLWRyYXdlci0tc2hvdyAuc2lkZS1kcmF3ZXJfX292ZXJsYXkge1xuICBwb2ludGVyLWV2ZW50czogYWxsO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBvcGFjaXR5OiAxO1xufVxuLnNpZGUtZHJhd2VyLS1zaG93IC5zaWRlLWRyYXdlcl9fZHJhd2VyIHtcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgb3BhY2l0eTogMTtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xufVxuXG4uYWNjb3VudC1uYXZpZ2F0aW9uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiA3MDE7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjVweCkge1xuICAuYWNjb3VudC1uYXZpZ2F0aW9uIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4uYWNjb3VudC1uYXZpZ2F0aW9uX19vdmVybGF5IHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgb3BhY2l0eTogMDtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0LCBvcGFjaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0LCBvcGFjaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMTEsIDExMSwgMTExLCAwLjQpO1xufVxuLmFjY291bnQtbmF2aWdhdGlvbl9fZHJhd2VyIHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDJweCA1cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDJweCA1cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgb3BhY2l0eTogMDtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBsZWZ0IDI1MG1zIGVhc2UtaW4tb3V0LCB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0LCBvcGFjaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBsZWZ0IDI1MG1zIGVhc2UtaW4tb3V0LCB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0LCBvcGFjaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IC0yNXJlbTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLmFjY291bnQtbmF2aWdhdGlvbl9fZHJhd2VyIHtcbiAgICB3aWR0aDogMjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmFjY291bnQtbmF2aWdhdGlvbl9fZHJhd2VyLS1sb2dnZWQge1xuICAgIHBhZGRpbmctdG9wOiAzLjMzMzMzMzMzMzNyZW07XG4gIH1cbn1cbi5hY2NvdW50LW5hdmlnYXRpb25fX2hvbGRlciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXgtcG9zaXRpdmU6IDE7XG4gICAgICAgICAgZmxleC1ncm93OiAxO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG4uYWNjb3VudC1uYXZpZ2F0aW9uX19uYXZpZ2F0aW9uLXRvcCB7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDJyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5hY2NvdW50LW5hdmlnYXRpb25fX25hdmlnYXRpb24tdG9wLWFjdGlvbnMge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi5hY2NvdW50LW5hdmlnYXRpb25fX2Nsb3NlLXJvdyB7XG4gIGJvcmRlci10b3Atd2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xuICBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbiAgbGluZS1oZWlnaHQ6IDNyZW07XG59XG4uYWNjb3VudC1uYXZpZ2F0aW9uX19jbG9zZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGVuZDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmb250LXNpemU6IDEuMzMzMzMzMzMzM3JlbTtcbiAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uYWNjb3VudC1uYXZpZ2F0aW9uX19jbG9zZSBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmFjY291bnQtbmF2aWdhdGlvbl9fY2xvc2Ugc3ZnIHtcbiAgd2lkdGg6IDEuMzMzMzMzMzMzM3JlbTtcbiAgaGVpZ2h0OiAxLjMzMzMzMzMzMzNyZW07XG4gIG1hcmdpbi1sZWZ0OiAwLjVyZW07XG59XG4uYWNjb3VudC1uYXZpZ2F0aW9uX19jbG9zZS1sYWJlbCB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbn1cbi5hY2NvdW50LW5hdmlnYXRpb25fX3VzZXItbGluayB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGVuZDtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBlbmQ7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICBwYWRkaW5nOiAwLjhyZW0gMDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGluZS1oZWlnaHQ6IDEuMDY2NjY2NjY2N3JlbTtcbiAgZm9udC1zaXplOiAwLjY2NjY2NjY2NjdyZW07XG4gIGxldHRlci1zcGFjaW5nOiAwLjA0cmVtO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuLmFjY291bnQtbmF2aWdhdGlvbl9fdXNlci1saW5rLWljb24ge1xuICBtYXJnaW4tcmlnaHQ6IDAuNjY2NjY2NjY2N3JlbTtcbn1cbi5hY2NvdW50LW5hdmlnYXRpb25fX25hdmlnYXRpb24ge1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXg6IDE7XG4gICAgICAgICAgZmxleDogMTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmFjY291bnQtbmF2aWdhdGlvbl9faW5mbyB7XG4gIC1tcy1mbGV4LW5lZ2F0aXZlOiAwO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gIHBhZGRpbmctYm90dG9tOiAxLjY2NjY2NjY2NjdyZW07XG59XG4uYWNjb3VudC1uYXZpZ2F0aW9uX19jb250YWN0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDEuMDY2NjY2NjY2N3JlbSAxcmVtIDEuMDY2NjY2NjY2N3JlbSA0LjI2NjY2NjY2NjdyZW07XG4gIGJvcmRlci1yYWRpdXM6IDAuMTMzMzMzMzMzM3JlbTtcbiAgYm9yZGVyOiAwLjA2NjY2NjY2NjdyZW0gc29saWQgI2VjZWNlYztcbiAgY29sb3I6ICNkMGQwZDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5hY2NvdW50LW5hdmlnYXRpb25fX2NvbnRhY3QtaWNvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMS4zMzMzMzMzMzMzcmVtO1xuICB0b3A6IDUwJTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuLmFjY291bnQtbmF2aWdhdGlvbl9fY29udGFjdC10ZXh0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICBsaW5lLWhlaWdodDogMS4yO1xufVxuLmFjY291bnQtbmF2aWdhdGlvbl9fY29udGFjdC10ZXh0LS13ZWlnaHQge1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLmFjY291bnQtbmF2aWdhdGlvbi0tc2hvdyAuYWNjb3VudC1uYXZpZ2F0aW9uX19vdmVybGF5IHtcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgb3BhY2l0eTogMTtcbn1cbi5hY2NvdW50LW5hdmlnYXRpb24tLXNob3cgLmFjY291bnQtbmF2aWdhdGlvbl9fZHJhd2VyIHtcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgb3BhY2l0eTogMTtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjlweCkge1xuICAuYWNjb3VudC1uYXZpZ2F0aW9uIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4uYWNjb3VudC1uYXZpZ2F0aW9uX19kcmF3ZXIge1xuICAtd2Via2l0LXRyYW5zaXRpb246IHJpZ2h0IDI1MG1zIGVhc2UtaW4tb3V0LCB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0LCBvcGFjaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiByaWdodCAyNTBtcyBlYXNlLWluLW91dCwgdmlzaWJpbGl0eSAyNTBtcyBlYXNlLWluLW91dCwgb3BhY2l0eSAyNTBtcyBlYXNlLWluLW91dDtcbiAgd2lkdGg6IDIxLjMzMzMzMzMzMzNyZW07XG4gIGxlZnQ6IGF1dG87XG4gIHBhZGRpbmctdG9wOiAwO1xuICByaWdodDogLTIxLjMzMzMzMzMzMzNyZW07XG4gIHRvcDogMDtcbn1cbi5hY2NvdW50LW5hdmlnYXRpb24tLXNob3cgLmFjY291bnQtbmF2aWdhdGlvbl9fZHJhd2VyIHtcbiAgbGVmdDogYXV0bztcbiAgcmlnaHQ6IDA7XG59XG4uYWNjb3VudC1uYXZpZ2F0aW9uX19jbG9zZSB7XG4gIHJpZ2h0OiAwO1xuICB0b3A6IDAuMzMzMzMzMzMzM3JlbTtcbiAgbGVmdDogYXV0bztcbiAgY29sb3I6ICNmZmY7XG59XG4uYWNjb3VudC1uYXZpZ2F0aW9uX19hY2NvdW50IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAxLjA2NjY2NjY2NjdyZW0gMy4zMzMzMzMzMzMzcmVtIDEuMDY2NjY2NjY2N3JlbSAxLjZyZW07XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kOiAjMzQyNDgzO1xuICAtbXMtZmxleC1uZWdhdGl2ZTogMDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xufVxuLmFjY291bnQtbmF2aWdhdGlvbl9fYWNjb3VudC0tY29tcGFueSB7XG4gIGJhY2tncm91bmQ6ICNmZWNjMDA7XG59XG4uYWNjb3VudC1uYXZpZ2F0aW9uX19hY2NvdW50LWljb24ge1xuICAtbXMtZmxleC1uZWdhdGl2ZTogMDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICBtYXJnaW4tcmlnaHQ6IDJyZW07XG59XG4uYWNjb3VudC1uYXZpZ2F0aW9uX19hY2NvdW50LXRleHQge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgbGluZS1oZWlnaHQ6IDAuOTMzMzMzMzMzM3JlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uYWNjb3VudC1uYXZpZ2F0aW9uX19ob2xkZXIge1xuICBwYWRkaW5nOiAwIDEuMzMzMzMzMzMzM3JlbTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmJ1eS1ib3gge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgcGFkZGluZzogMS41cmVtO1xufVxuLmJ1eS1ib3ggc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi5idXktYm94X190b3Age1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cbi5idXktYm94X19ib3R0b20ge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cbi5idXktYm94X19za3UtZW5lcmd5IHtcbiAgbGluZS1oZWlnaHQ6IDI7XG59XG4uYnV5LWJveF9fZW5lcmd5LWxhYmVsIHtcbiAgZm9udC1zaXplOiAzLjMzMzMzMzMzMzNyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjA2NjY2NjY2NjdyZW07XG59XG4uYnV5LWJveF9fZW5lcmd5LWxhYmVsIHN2ZyB7XG4gIHdpZHRoOiAzLjMzMzMzMzMzMzNyZW07XG4gIGhlaWdodDogMy4zMzMzMzMzMzMzcmVtO1xufVxuLmJ1eS1ib3hfX2VuZXJneS1sYWJlbC1wbGFjZWhvbGRlciB7XG4gIGhlaWdodDogMy4zMzMzMzMzMzMzcmVtO1xufVxuLmJ1eS1ib3hfX29mZmljaWFsLXByaWNlLS1yZWR1Y2VkIC5wcmljZV9fYW1vdW50LXZhbHVlIHtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgY29sb3I6ICNiMmIyYjI7XG59XG4uYnV5LWJveF9fb2ZmaWNpYWwtcHJpY2UtLXJlZHVjZWQgLnByaWNlX19tb2RlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5idXktYm94X19jdXN0b20tcHJpY2Uge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbi5idXktYm94X190b29sdGlwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4uYnV5LWJveF9fdG9vbHRpcCAuaWNvbiB7XG4gIGN1cnNvcjogYXV0bztcbn1cbi5idXktYm94X190b29sdGlwIC5idXktYm94X190b29sdGlwLWNvbnRhaW5lciB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogcmdiYSgwLCAwLCAwLCAwLjIpIDAgMXB4IDJweCAwO1xuICAgICAgICAgIGJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4yKSAwIDFweCAycHggMDtcbiAgZGlzcGxheTogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZzogMC41cmVtO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDE7XG4gIGJvdHRvbTogMi41MzMzMzMzMzMzcmVtO1xuICBtYXJnaW4tbGVmdDogLTUuMzMzMzMzMzMzM3JlbTtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG59XG4uYnV5LWJveF9fdG9vbHRpcDpob3ZlciAuYnV5LWJveF9fdG9vbHRpcC1jb250YWluZXIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4uYnV5LWJveF9fdG9vbHRpcCAuYnV5LWJveF9fdG9vbHRpcC1jb250YWluZXI6OmFmdGVyIHtcbiAgYm9yZGVyLXdpZHRoOiAwLjQ2NjY2NjY2NjdyZW07XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2ZmZiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IC0wLjhyZW07XG4gIHJpZ2h0OiAwLjQ2NjY2NjY2NjdyZW07XG59XG4uYnV5LWJveF9fYWN0aW9ucy1jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLmJ1eS1ib3hfX2FjdGlvbnMtY29udGFpbmVyIHtcbiAgICAtd2Via2l0LWJveC1wYWNrOiBlbmQ7XG4gICAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTIwMHB4KSB7XG4gIC5idXktYm94X19hY3Rpb25zLWNvbnRhaW5lciB7XG4gICAgbWFyZ2luLXRvcDogMXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAuYnV5LWJveF9fYWN0aW9ucy1jb250YWluZXItLWhhcy1hZGQtdG8tY2FydC1idXR0b24ge1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5idXktYm94X19maW5kLXNlbGxlci1idXR0b24ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi5idXktYm94X19hdmFpbGFiaWxpdHkge1xuICBwYWRkaW5nLXRvcDogMC41cmVtO1xufVxuLmJ1eS1ib3hfX2JhZGdlIHtcbiAgaGVpZ2h0OiAxLjg2NjY2NjY2NjdyZW07XG4gIHdpZHRoOiBhdXRvO1xuICBkaXNwbGF5OiBub25lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAuYnV5LWJveF9fYmFkZ2Uge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG4uYnV5LWJveF9fcHJpY2Utb24tcmVxdWVzdCB7XG4gIG1hcmdpbjogMXJlbSAwO1xufVxuLmJ1eS1ib3ggLmljb24tLWluZm8tdGV4dCB7XG4gIGZvbnQtc2l6ZTogMS44cmVtO1xufVxuLmJ1eS1ib3hfX3NsdnRlYy1jb250YWluZXIge1xuICBtYXJnaW4tdG9wOiAxcmVtO1xufVxuLmJ1eS1ib3hfX3NsdnRlYy1saW5rIHtcbiAgY29sb3I6ICMwMWEzZWM7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICBwYWRkaW5nOiAwO1xufVxuLmJ1eS1ib3hfX3NsdnRlYy1saW5rIC5idXR0b25fX2xhYmVsLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAtd2Via2l0LWZpdC1jb250ZW50O1xuICB3aWR0aDogLW1vei1maXQtY29udGVudDtcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xufVxuLmJ1eS1ib3hfX3NsdnRlYy1saW5rOmhvdmVyIHtcbiAgY29sb3I6ICM0YjRiNGQ7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb29raWViYXJfX2Nvb2tpZS13cmFwcGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRiNGI0ZDtcbiAgY29sb3I6ICNmZmY7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIHotaW5kZXg6IDEwMDAwO1xufVxuLmNvb2tpZWJhcl9fY29va2llLXdyYXBwZXIgc3ZnIHtcbiAgZmlsbDogI2ZmZjtcbn1cbi5jb29raWViYXJfX2J1dHRvbi13cmFwcGVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW4tbGVmdDogMS41cmVtO1xufVxuLmNvb2tpZWJhcl9fY29va2llLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtaW5saW5lLWJveDtcbiAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94O1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBoZWlnaHQ6IGF1dG87XG4gIG1hcmdpbjogMXJlbSBhdXRvO1xuICBtYXgtd2lkdGg6IDgwcmVtO1xuICBwYWRkaW5nOiAwIDFyZW07XG4gIHdpZHRoOiAxMDAlO1xufVxuLmNvb2tpZWJhcl9fY29va2llLWNvbnRhaW5lciAuYnV0dG9uOmhvdmVyIHtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogd2hpdGU7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0YjRiNGQ7XG4gIGNvbG9yOiAjZmZmO1xufVxuLmNvb2tpZWJhcl9fY29va2llLWNvbnRhaW5lciAuYnV0dG9uOmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICNmZmY7XG59XG4uY29va2llYmFyX19jb29raWUtaW5mb3JtYXRpb24ge1xuICBtYXJnaW4tbGVmdDogMDtcbiAgd2lkdGg6IDkwJTtcbn1cbi5jb29raWViYXJfX2Nvb2tpZS1pbmZvcm1hdGlvbiBhIHtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvb2tpZWJhcl9fY29va2llLWluZm9ybWF0aW9uIGE6aG92ZXIge1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmNvb2tpZWJhcl9fY29va2llLWZ1cnRoZXItaW5mb3JtYXRpb24ge1xuICBjb2xvcjogI2ZmZjtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIG1hcmdpbi1sZWZ0OiAwLjI1cmVtO1xufVxuLmNvb2tpZWJhcl9fY29va2llLWZ1cnRoZXItaW5mb3JtYXRpb246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5mYXN0Y2FsYyB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHJhZGlhbC1ncmFkaWVudChhdCBjZW50ZXIgY2VudGVyLCAjNmY2ZjZmIDI4JSwgIzRiNGI0ZCAxMDElKTtcbiAgbWFyZ2luLXRvcDogMS42NjY2NjY2NjY3cmVtO1xuICBwYWRkaW5nOiAxLjVyZW0gMXJlbTtcbn1cbi5mYXN0Y2FsY19fZmFzdGNhbGMge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbi5mYXN0Y2FsY19fZmFzdGNhbGMgLmljb24ge1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG4uZmFzdGNhbGNfX2Zhc3RjYWxjIC5pY29uOjpiZWZvcmUge1xuICBmb250LXNpemU6IDRyZW07XG59XG4uZmFzdGNhbGNfX3RpdGxlLCAuZmFzdGNhbGNfX3RleHQge1xuICBjb2xvcjogI2ZmZjtcbn1cbi5mYXN0Y2FsY19fdGl0bGUge1xuICBmb250LXdlaWdodDogNzAwO1xuICBmb250LXNpemU6IDEuMnJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5mYXN0Y2FsYyAuYnV0dG9uIHtcbiAgICBwYWRkaW5nOiA3LjVweCA3LjVweCA3LjVweCAxLjQ2NjY2NjY2NjdyZW07XG4gICAgcGFkZGluZzogMC41cmVtIDAuNXJlbSAwLjVyZW0gMS40NjY2NjY2NjY3cmVtO1xuICB9XG4gIC5mYXN0Y2FsYyAuYnV0dG9uX19pY29uLXJpZ2h0IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNjY2NjY2NjY2N3JlbTtcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uZmlsdGVyLXNlbGVjdGlvbi1tb2RhbF9fZmlsdGVyLWdyb3VwLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwYWRkaW5nLWJvdHRvbTogNnJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmZpbHRlci1zZWxlY3Rpb24tbW9kYWxfX2ZpbHRlci1ncm91cC1jb250YWluZXIge1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5maWx0ZXItc2VsZWN0aW9uLW1vZGFsX19maWx0ZXItY29sdW1uIHtcbiAgICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgICAtbXMtZmxleDogMTtcbiAgICAgICAgICAgIGZsZXg6IDE7XG4gIH1cbn1cbi5maWx0ZXItc2VsZWN0aW9uLW1vZGFsX19ib3R0b20tYmFyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgcGFkZGluZzogMXJlbTtcbn1cbi5maWx0ZXItc2VsZWN0aW9uLW1vZGFsX19ib3R0b20tYmFyIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4uZmlsdGVyLXNlbGVjdGlvbi1tb2RhbF9fc3VibWl0LWJ1dHRvbi1jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGVuZDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZmlsdGVyLXNlbGVjdGlvbi1tb2RhbF9fc3VibWl0LWJ1dHRvbi1jb250YWluZXIge1xuICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIH1cbn1cbi5maWx0ZXItc2VsZWN0aW9uLW1vZGFsX19tb2RhbC13aW5kb3cgLm1vZGFsLXdpbmRvd19fY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXgtd2lkdGg6IDYwcmVtO1xufVxuLmZpbHRlci1zZWxlY3Rpb24tbW9kYWxfX2ZpbHRlci1ncm91cCB7XG4gIHBhZGRpbmctdG9wOiAxcmVtO1xuICBwYWRkaW5nLWJvdHRvbTogMXJlbTtcbn1cbi5maWx0ZXItc2VsZWN0aW9uLW1vZGFsX19maWx0ZXItcm93IHtcbiAgcGFkZGluZy10b3A6IDAuMjVyZW07XG4gIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5maW5kLWRlYWxlciB7XG4gICAgbWFyZ2luLWxlZnQ6IDJyZW07XG4gIH1cbn1cbi5maW5kLWRlYWxlci0tcGRwIHtcbiAgYm9yZGVyLXRvcC13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICNkMGQwZDA7XG4gIG1hcmdpbi10b3A6IDFyZW07XG4gIHBhZGRpbmctdG9wOiAxcmVtO1xuICBtYXJnaW4tbGVmdDogMDtcbn1cbi5maW5kLWRlYWxlcl9fYnV0dG9uLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtZmxvdzogd3JhcDtcbiAgICAgIGZsZXgtZmxvdzogd3JhcDtcbiAgd2lkdGg6IDEwMCU7XG59XG4uZmluZC1kZWFsZXJfX2J1dHRvbi1jb250YWluZXIgLmJ1dHRvbiB7XG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAxMDAlO1xuICAgICAgZmxleC1iYXNpczogMTAwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5maW5kLWRlYWxlcl9fYnV0dG9uLWNvbnRhaW5lciAuYnV0dG9uIHtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogNTAlO1xuICAgICAgICBmbGV4LWJhc2lzOiA1MCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLmZpbmQtZGVhbGVyX19idXR0b24tY29udGFpbmVyIC5idXR0b24ge1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiA1MCU7XG4gICAgICAgIGZsZXgtYmFzaXM6IDUwJTtcbiAgfVxufVxuLmZpbmQtZGVhbGVyX19idXR0b24tY29udGFpbmVyIC5idXR0b246Zmlyc3QtY2hpbGQge1xuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xufVxuLmZpbmQtZGVhbGVyX19idXR0b24tY29udGFpbmVyIC5idXR0b25fX2xhYmVsIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbi5maW5kLWRlYWxlcl9fYnV0dG9uLWNvbnRhaW5lciAuaWNvbiB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLmZpbmQtZGVhbGVyX19jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LWFsaWduOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgLW1zLWZsZXgtZmxvdzogd3JhcDtcbiAgICAgIGZsZXgtZmxvdzogd3JhcDtcbn1cbi5maW5kLWRlYWxlcl9fY29udGFpbmVyIC5maW5kLWRlYWxlcl9fc2VjdGlvbiB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtZmxvdzogd3JhcDtcbiAgICAgIGZsZXgtZmxvdzogd3JhcDtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDUwJTtcbiAgICAgIGZsZXgtYmFzaXM6IDUwJTtcbiAgLyogb25lIGl0ZW0gKi9cbiAgLyogdHdvIGl0ZW1zICovXG59XG4uZmluZC1kZWFsZXJfX2NvbnRhaW5lciAuZmluZC1kZWFsZXJfX3NlY3Rpb246Zmlyc3QtY2hpbGQ6bnRoLWxhc3QtY2hpbGQoMSkge1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMTAwJTtcbiAgICAgIGZsZXgtYmFzaXM6IDEwMCU7XG59XG4uZmluZC1kZWFsZXJfX2NvbnRhaW5lciAuZmluZC1kZWFsZXJfX3NlY3Rpb246Zmlyc3QtY2hpbGQ6bnRoLWxhc3QtY2hpbGQoMikge1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogNTAlO1xuICAgICAgZmxleC1iYXNpczogNTAlO1xufVxuLmZpbmQtZGVhbGVyX19jb250YWluZXIgLmZpbmQtZGVhbGVyX19zZWN0aW9uIC5oZWFkbGluZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBsaW5lLWhlaWdodDogMTtcbiAgbWFyZ2luLWJvdHRvbTogMC43NXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiAxMjAwcHgpIHtcbiAgLmZpbmQtZGVhbGVyX19jb250YWluZXIgLmZpbmQtZGVhbGVyX19zZWN0aW9uIHtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgICAtbXMtZmxleC1mbG93OiBjb2x1bW47XG4gICAgICAgICAgICBmbGV4LWZsb3c6IGNvbHVtbjtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0bztcbiAgICAgICAgZmxleC1iYXNpczogYXV0bztcbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgfVxuICAuZmluZC1kZWFsZXJfX2NvbnRhaW5lciAuZmluZC1kZWFsZXJfX3NlY3Rpb246bm90KDpmaXJzdC1jaGlsZCkge1xuICAgIHBhZGRpbmctdG9wOiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU1MHB4KSB7XG4gIC5maW5kLWRlYWxlcl9fY29udGFpbmVyIC5maW5kLWRlYWxlcl9fc2VjdGlvbiB7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZmxvdzogY29sdW1uO1xuICAgICAgICAgICAgZmxleC1mbG93OiBjb2x1bW47XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XG4gICAgICAgIGZsZXgtYmFzaXM6IGF1dG87XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLmZpbmQtZGVhbGVyX19jb250YWluZXIgLmZpbmQtZGVhbGVyX19zZWN0aW9uOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICBwYWRkaW5nLXRvcDogMXJlbTtcbiAgfVxufVxuLmZpbmQtZGVhbGVyIC5pY29uLWJ1dHRvbi0tZmluZC1kZWFsZXIge1xuICBtYXJnaW46IDA7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5mb290ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGI0YjRkO1xuICBjb2xvcjogI2ZmZjtcbiAgLXdlYmtpdC1ib3gtZmxleDogMDtcbiAgICAgIC1tcy1mbGV4OiBub25lO1xuICAgICAgICAgIGZsZXg6IG5vbmU7XG59XG5AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpLCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSkge1xuICAuZm9vdGVyIHtcbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbiAgICAtbXMtZmxleC1uZWdhdGl2ZTogMCAhaW1wb3J0YW50O1xuICAgICAgICBmbGV4LXNocmluazogMCAhaW1wb3J0YW50O1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgICAgIGZsZXgtYmFzaXM6IGF1dG8gIWltcG9ydGFudDtcbiAgICAvKiBzdHlsZWxpbnQtZW5hYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5mb290ZXIge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLmZvb3Rlcl9fc3Vic2NyaWJlIHtcbiAgICBwYWRkaW5nLXRvcDogMS4zMzMzMzMzMzMzcmVtO1xuICAgIHBhZGRpbmctYm90dG9tOiAyLjEzMzMzMzMzMzNyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmZvb3Rlcl9fc3Vic2NyaWJlIHtcbiAgICBwYWRkaW5nLXRvcDogMy4zMzMzMzMzMzMzcmVtO1xuICAgIHBhZGRpbmctYm90dG9tOiAzLjMzMzMzMzMzMzNyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5mb290ZXJfX3N1YnNjcmliZSB7XG4gICAgcGFkZGluZy10b3A6IDUuMTMzMzMzMzMzM3JlbTtcbiAgICBwYWRkaW5nLWJvdHRvbTogNS4xMzMzMzMzMzMzcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5mb290ZXJfX2xvZ29zIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIHBhZGRpbmc6IDAuNXJlbSAwIDA7XG4gICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAuMnJlbSAwLjJyZW0gMCwgMCAxLjJyZW0gMS4ycmVtIDA7XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwIDAuMnJlbSAwLjJyZW0gMCwgMCAxLjJyZW0gMS4ycmVtIDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmZvb3Rlcl9fbG9nb3Mge1xuICAgIHBhZGRpbmc6IDEuNzMzMzMzMzMzM3JlbSAwO1xuICB9XG59XG4uZm9vdGVyX19uYXZpZ2F0aW9uIHtcbiAgcGFkZGluZzogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmZvb3Rlcl9fbmF2aWdhdGlvbiB7XG4gICAgbWFyZ2luOiAyLjMzMzMzMzMzMzNyZW0gMnJlbTtcbiAgfVxuICAuZm9vdGVyX19uYXZpZ2F0aW9uIC5saXN0X19pdGVtIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLmZvb3Rlcl9fbmF2aWdhdGlvbiAubGlzdF9faXRlbTo6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIj5cIjtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjY2NjY2NjY2NjdyZW07XG4gICAgY29sb3I6ICNmZmY7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxpbmUtaGVpZ2h0OiAyO1xuICB9XG4gIC5mb290ZXJfX25hdmlnYXRpb24gLm5hdmlnYXRpb24tbGlzdF9fZWxlbWVudCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAyO1xuICB9XG59XG4uZm9vdGVyX19jb250YWN0LWluZm8taXRlbSB7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbiAgY29sb3I6ICM2ZjZmNmY7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICBmb250LXdlaWdodDogNTAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1pbi1oZWlnaHQ6IDQuNjY2NjY2NjY2N3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmZvb3Rlcl9fY29udGFjdC1pbmZvLWl0ZW0ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuZm9vdGVyX19jb250YWN0LWluZm8taXRlbSB7XG4gICAgZm9udC1zaXplOiAxLjJyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNTMzMzMzMzMzM3JlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZm9vdGVyX19waG9uZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgICBjb2xvcjogIzkyOTI5MjtcbiAgfVxufVxuLmZvb3Rlcl9fcGhvbmU6aG92ZXIsIC5mb290ZXJfX3Bob25lOmZvY3VzIHtcbiAgY29sb3I6ICNiMmIyYjI7XG59XG4uZm9vdGVyX19zb2NpYWwge1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogMS41MzMzMzMzMzMzcmVtO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZvbnQtc2l6ZTogMS4wNjY2NjY2NjY3cmVtO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbGluZS1oZWlnaHQ6IDFyZW07XG4gIGNvbG9yOiAjZmZmO1xuICBsZXR0ZXItc3BhY2luZzogMC4wMzZyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgcGFkZGluZy1sZWZ0OiAwLjZyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDAuNnJlbTtcbiAgcGFkZGluZy10b3A6IDIuNjY2NjY2NjY2N3JlbTtcbn1cbi5mb290ZXJfX3NvY2lhbC1pY29ucyB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgcGFkZGluZy10b3A6IDFyZW07XG4gIHdpZHRoOiAxMDAlO1xufVxuLmZvb3Rlcl9fc29jaWFsLWljb25zIC5pY29uLWJ1dHRvbiB7XG4gIG1hcmdpbjogMCAwLjVyZW0gMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmZvb3Rlcl9fc29jaWFsIHtcbiAgICBtYXJnaW4tYm90dG9tOiAzLjEzMzMzMzMzMzNyZW07XG4gIH1cbn1cbi5mb290ZXJfX3F1YWxpdHkge1xuICB3aWR0aDogMTAwJTtcbiAgZm9udC1zaXplOiAxLjA2NjY2NjY2NjdyZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBsaW5lLWhlaWdodDogMXJlbTtcbiAgY29sb3I6ICNmZmY7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAzNnJlbTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNmZmY7XG4gIHBhZGRpbmctdG9wOiAyLjY2NjY2NjY2NjdyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgcGFkZGluZy1sZWZ0OiAwLjZyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDAuNnJlbTtcbn1cbi5mb290ZXJfX3F1YWxpdHktdGV4dCB7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICBmb250LXdlaWdodDogbGlnaHRlcjtcbiAgcGFkZGluZy10b3A6IDEuMzMzMzMzMzMzM3JlbTtcbiAgcGFkZGluZy1sZWZ0OiAwLjZyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDAuNnJlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmZvb3Rlcl9fcXVhbGl0eSB7XG4gICAgcGFkZGluZy10b3A6IDEuMzMzMzMzMzMzM3JlbTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMi4xMzMzMzMzMzMzcmVtO1xuICAgIGJvcmRlci10b3A6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5mb290ZXJfX3F1YWxpdHkge1xuICAgIHBhZGRpbmctdG9wOiA1LjEzMzMzMzMzMzNyZW07XG4gICAgcGFkZGluZy1ib3R0b206IDUuMTMzMzMzMzMzM3JlbTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgd2lkdGg6IDUwJTtcbiAgfVxufVxuLmZvb3Rlcl9faGludCB7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xuICBsaW5lLWhlaWdodDogMXJlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogI2ZmZjtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDM2cmVtO1xuICBwYWRkaW5nOiAxcmVtO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgIzZmNmY2Zjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLmZvb3Rlcl9faGludCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwLjZyZW07XG4gICAgcGFkZGluZy1yaWdodDogMC42cmVtO1xuICB9XG59XG4uZm9vdGVyX19jb3B5cmlnaHQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVjYzAwO1xufVxuLmZvb3Rlcl9fY29weXJpZ2h0IC5jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgcGFkZGluZzogMS4zMzMzMzMzMzMzcmVtIDEuMzMzMzMzMzMzM3JlbSAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbn1cbi5mb290ZXJfX2NvcHlyaWdodCAuY29udGFpbmVyIC50ZXJtcyB7XG4gIHdpZHRoOiAxMDAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZm9vdGVyX19jb3B5cmlnaHQgLmNvbnRhaW5lciB7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgdGV4dC1hbGlnbjogaW5pdGlhbDtcbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgfVxuICAuZm9vdGVyX19jb3B5cmlnaHQgLmNvbnRhaW5lciAudGVybXMge1xuICAgIHdpZHRoOiBhdXRvO1xuICB9XG4gIC5mb290ZXJfX2NvcHlyaWdodCAuY29udGFpbmVyIC5wcml2YWN5LW5hdmlnYXRpb24ge1xuICAgIHdpZHRoOiBhdXRvO1xuICB9XG59XG4uZm9vdGVyIC5pY29uLS1mYWNlYm9vazpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzYjU5OTg7XG59XG4uZm9vdGVyIC5pY29uLS1pbnN0YWdyYW06aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTEzMDZjO1xufVxuLmZvb3RlciAuaWNvbi0tbGlua2VkaW46aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3N2I1O1xufVxuLmZvb3RlciAuaWNvbi0teW91dHViZTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjNDMwMmI7XG59XG4uZm9vdGVyIC5pY29uLS10d2l0dGVyOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwYWNlZTtcbn1cbi5mb290ZXIgLmljb24tLXhpbmc6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTI2NTY3O1xufVxuLmZvb3RlciAuaWNvbi0tcGludGVyZXN0OmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M4MjMyYztcbn1cbi5mb290ZXIgLmludGVybmF0aW9uYWxpemF0aW9uIHtcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG59XG4uZm9vdGVyX19pbnRlcm5hdGlvbmFsLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmctYm90dG9tOiAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZm9vdGVyX19pbnRlcm5hdGlvbmFsLWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLmZvb3Rlcl9faW50ZXJuYXRpb25hbCB7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG4uZm9vdGVyIC5jdXN0b20tZWxlbWVudCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLmZvb3RlciAuY3VzdG9tLWVsZW1lbnQge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgfVxufVxuLmZvb3RlciAuY291bnRyeS1zZWxlY3Rpb25fX2ludGVybmF0aW9uYWxpemF0aW9uLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBwYWRkaW5nOiAwO1xuICBjb2xvcjogI2ZmZjtcbn1cbi5mb290ZXIgLmNvdW50cnktc2VsZWN0aW9uX19pbnRlcm5hdGlvbmFsaXphdGlvbi1jb250YWluZXIgLmJ1dHRvbiB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGNvbG9yOiAjZmZmO1xuICBwYWRkaW5nLXRvcDogMXJlbTtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4uZm9vdGVyIC5jb3VudHJ5LXNlbGVjdGlvbl9faW50ZXJuYXRpb25hbGl6YXRpb24tY29udGFpbmVyIC5idXR0b25fX2xhYmVsLCAuZm9vdGVyIC5jb3VudHJ5LXNlbGVjdGlvbl9faW50ZXJuYXRpb25hbGl6YXRpb24tY29udGFpbmVyIC5idXR0b25fX2xhYmVsLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmZvb3RlciAuY291bnRyeS1zZWxlY3Rpb25fX2NvbnRhaW5lci0tc2hvdyB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xufVxuLmZvb3RlciAuY291bnRyeS1zZWxlY3Rpb25fX2NvbnRhaW5lci0tc2hvdyAuY291bnRyeS1saXN0X19tb2RhbCB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLmZvb3RlciAuY291bnRyeS1zZWxlY3Rpb25fX2NvbnRhaW5lci0tc2hvdyAubGluayB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLmZvb3RlciAuY291bnRyeS1zZWxlY3Rpb25fX2NvbnRhaW5lci0tc2hvdyAubGluay0taXMtYWN0aXZlIHtcbiAgY29sb3I6ICNmZWNjMDA7XG59XG4uZm9vdGVyIC5jb3VudHJ5LXNlbGVjdGlvbl9fY29udGFpbmVyLS1zaG93OjpiZWZvcmUge1xuICBjb250ZW50OiBub25lO1xufVxuLmZvb3RlciAuY291bnRyeS1zZWxlY3Rpb25fX2NvbnRhaW5lci0tc2hvdyAuY291bnRyeS1zZWxlY3Rpb25fX2ludGVybmF0aW9uYWxpemF0aW9uLWNvbnRhaW5lciB7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG59XG5cbi5mb290ZXIgLmNvdW50cnktc2VsZWN0aW9uX19jb250YWluZXItLXNob3cgLmNvdW50cnktbGlzdF9fbW9kYWwsXG4uc2lkZS1kcmF3ZXIgLmNvdW50cnktc2VsZWN0aW9uX19jb250YWluZXItLXNob3cgLmNvdW50cnktbGlzdF9fbW9kYWwge1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiA4MHJlbTtcbiAgbWFyZ2luOiBhdXRvO1xuICBwYWRkaW5nOiAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmZvb3RlciAuY291bnRyeS1zZWxlY3Rpb25fX2NvbnRhaW5lci0tc2hvdyAuY291bnRyeS1saXN0X19tb2RhbCxcbiAgLnNpZGUtZHJhd2VyIC5jb3VudHJ5LXNlbGVjdGlvbl9fY29udGFpbmVyLS1zaG93IC5jb3VudHJ5LWxpc3RfX21vZGFsIHtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gICAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAgIC1tcy1mbGV4LWZsb3c6IHJvdztcbiAgICAgICAgICAgIGZsZXgtZmxvdzogcm93O1xuICAgIHBhZGRpbmc6IDFyZW07XG4gIH1cbn1cblxuLnNpZGUtZHJhd2VyIC5jb3VudHJ5LWxpc3RfX21vZGFsIHtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5zaWRlLWRyYXdlciAuY291bnRyeS1saXN0X19tb2RhbCAubGluayB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLnNpZGUtZHJhd2VyIC5jb3VudHJ5LWxpc3RfX21vZGFsIC5saW5rLS1pcy1hY3RpdmUge1xuICBjb2xvcjogI2ZlY2MwMDtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmluc3BpcmF0aW9uLXRvcGljIHtcbiAgbWFyZ2luOiA0cmVtIC0wLjEzMzMzMzMzMzNyZW0gMDtcbn1cbi5pbnNwaXJhdGlvbi10b3BpY19faGVhZGxpbmUge1xuICBwYWRkaW5nOiAwIDAuNXJlbTtcbn1cbi5pbnNwaXJhdGlvbi10b3BpY19fY29udGVudCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBmbGV4LXdyYXA6IHdyYXA7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5pbnRlcm5hdGlvbmFsaXphdGlvbiB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgLXdlYmtpdC1ib3gtcGFjazogZW5kO1xuICAgICAgLW1zLWZsZXgtcGFjazogZW5kO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4uaW50ZXJuYXRpb25hbGl6YXRpb24tLXN0cmV0Y2gge1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHdpZHRoOiAxMDAlO1xufVxuLmludGVybmF0aW9uYWxpemF0aW9uLS1zdHJldGNoIC5idXR0b25fX2xhYmVsLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uaW50ZXJuYXRpb25hbGl6YXRpb24tLXN0cmV0Y2ggLmNvdW50cnktbGlzdF9fbW9kYWwge1xuICBkaXNwbGF5OiBub25lO1xufVxuLmludGVybmF0aW9uYWxpemF0aW9uLS1zdHJldGNoIC5jb3VudHJ5LXNlbGVjdGlvbl9fY29udGFpbmVyLS1zaG93IHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG59XG4uaW50ZXJuYXRpb25hbGl6YXRpb24tLXN0cmV0Y2ggLmNvdW50cnktc2VsZWN0aW9uX19jb250YWluZXItLXNob3c6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IG5vbmU7XG59XG4uaW50ZXJuYXRpb25hbGl6YXRpb24tLXN0cmV0Y2ggLmNvdW50cnktc2VsZWN0aW9uX19pbnRlcm5hdGlvbmFsaXphdGlvbi1jb250YWluZXIge1xuICBwYWRkaW5nOiAwO1xufVxuLmludGVybmF0aW9uYWxpemF0aW9uLS1zdHJldGNoLS1mb290ZXIgc3ZnIHtcbiAgZmlsbDogI2ZmZjtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLm5hdmlnYXRpb24tbGlzdC1tb2JpbGUge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLm5hdmlnYXRpb24tbGlzdC1tb2JpbGVfX2JhY2stYnV0dG9uIHtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICNkMGQwZDA7XG59XG4ubmF2aWdhdGlvbi1saXN0LW1vYmlsZV9fbm9kZS10aXRsZSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRiNGI0ZDtcbiAgY29sb3I6ICNmZmY7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDNyZW07XG59XG4ubmF2aWdhdGlvbi1saXN0LW1vYmlsZV9fbm9kZS10aXRsZSBzdmcge1xuICBmaWxsOiAjZmZmO1xufVxuLm5hdmlnYXRpb24tbGlzdC1tb2JpbGVfX25vZGUtdGl0bGUtLWxpbmsge1xuICBjb2xvcjogI2ZmZjtcbn1cbi5uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlX19ub2RlLXRpdGxlLS1saW5rOmhvdmVyLCAubmF2aWdhdGlvbi1saXN0LW1vYmlsZV9fbm9kZS10aXRsZS0tbGluazphY3RpdmUsIC5uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlX19ub2RlLXRpdGxlLS1saW5rOmZvY3VzIHtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgY29sb3I6ICNmZmY7XG59XG4ubmF2aWdhdGlvbi1saXN0LW1vYmlsZV9fbm9kZS10aXRsZS0tc2x2dGVjIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAxYTNlYztcbn1cbi5uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlX19ub2RlLXRpdGxlIC5pY29uIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XG59XG4ubmF2aWdhdGlvbi1saXN0LW1vYmlsZV9fbm9kZS10aXRsZSAuaWNvbiBzdmcge1xuICB3aWR0aDogMS4zMzMzMzMzMzMzcmVtO1xuICBoZWlnaHQ6IDEuMzMzMzMzMzMzM3JlbTtcbn1cbi5uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlX19pdGVtLWxpc3Qge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ubmF2aWdhdGlvbi1saXN0LW1vYmlsZV9fbWVudSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4yKSAzcHggMCAycHggLTJweDtcbiAgICAgICAgICBib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMikgM3B4IDAgMnB4IC0ycHg7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ubmF2aWdhdGlvbi1saXN0LW1vYmlsZV9fbWVudSBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLm5hdmlnYXRpb24tbGlzdC1tb2JpbGVfX21lbnUtLWx2bC0wIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLm5hdmlnYXRpb24tbGlzdC1tb2JpbGVfX21lbnUtLWx2bC0xIC5uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlX19ub2RlLXRpdGxlIHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cbi5uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlX19tZW51LS1sdmwtMSB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogbGVmdCAyNTBtcyBlYXNlLWluLW91dCwgdmlzaWJpbGl0eSAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogbGVmdCAyNTBtcyBlYXNlLWluLW91dCwgdmlzaWJpbGl0eSAyNTBtcyBlYXNlLWluLW91dDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICB0b3A6IDA7XG4gIGJvdHRvbTogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xufVxuLm5hdmlnYXRpb24tbGlzdC1tb2JpbGVfX21lbnUtLWx2bC0xLmlzLWhpZGRlbiB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGxlZnQ6IC0xMDAlO1xufVxuLm5hdmlnYXRpb24tbGlzdC1tb2JpbGVfX21lbnUtLWx2bC0yIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBsZWZ0IDI1MG1zIGVhc2UtaW4tb3V0LCB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBsZWZ0IDI1MG1zIGVhc2UtaW4tb3V0LCB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG59XG4ubmF2aWdhdGlvbi1saXN0LW1vYmlsZV9fbWVudS0tbHZsLTIuaXMtaGlkZGVuIHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBkaXNwbGF5OiBibG9jaztcbiAgbGVmdDogLTEwMCU7XG59XG4ubmF2aWdhdGlvbi1saXN0LW1vYmlsZV9fbWVudS0tbHZsLTMge1xuICAtd2Via2l0LXRyYW5zaXRpb246IGxlZnQgMjUwbXMgZWFzZS1pbi1vdXQsIHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGxlZnQgMjUwbXMgZWFzZS1pbi1vdXQsIHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbn1cbi5uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlX19tZW51LS1sdmwtMy5pcy1oaWRkZW4ge1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBsZWZ0OiAtMTAwJTtcbn1cbi5uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlX19tZW51LS1sdmwtNCB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogbGVmdCAyNTBtcyBlYXNlLWluLW91dCwgdmlzaWJpbGl0eSAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogbGVmdCAyNTBtcyBlYXNlLWluLW91dCwgdmlzaWJpbGl0eSAyNTBtcyBlYXNlLWluLW91dDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICB0b3A6IDA7XG4gIGJvdHRvbTogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xufVxuLm5hdmlnYXRpb24tbGlzdC1tb2JpbGVfX21lbnUtLWx2bC00LmlzLWhpZGRlbiB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGxlZnQ6IC0xMDAlO1xufVxuLm5hdmlnYXRpb24tbGlzdC1tb2JpbGVfX21lbnUtLWx2bC01IHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBsZWZ0IDI1MG1zIGVhc2UtaW4tb3V0LCB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBsZWZ0IDI1MG1zIGVhc2UtaW4tb3V0LCB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG59XG4ubmF2aWdhdGlvbi1saXN0LW1vYmlsZV9fbWVudS0tbHZsLTUuaXMtaGlkZGVuIHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBkaXNwbGF5OiBibG9jaztcbiAgbGVmdDogLTEwMCU7XG59XG4ubmF2aWdhdGlvbi1saXN0LW1vYmlsZV9fbWVudS0tbHZsLTYge1xuICAtd2Via2l0LXRyYW5zaXRpb246IGxlZnQgMjUwbXMgZWFzZS1pbi1vdXQsIHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGxlZnQgMjUwbXMgZWFzZS1pbi1vdXQsIHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbn1cbi5uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlX19tZW51LS1sdmwtNi5pcy1oaWRkZW4ge1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBsZWZ0OiAtMTAwJTtcbn1cbi5uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlX19tZW51LS1sdmwtNyB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogbGVmdCAyNTBtcyBlYXNlLWluLW91dCwgdmlzaWJpbGl0eSAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogbGVmdCAyNTBtcyBlYXNlLWluLW91dCwgdmlzaWJpbGl0eSAyNTBtcyBlYXNlLWluLW91dDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICB0b3A6IDA7XG4gIGJvdHRvbTogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xufVxuLm5hdmlnYXRpb24tbGlzdC1tb2JpbGVfX21lbnUtLWx2bC03LmlzLWhpZGRlbiB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGxlZnQ6IC0xMDAlO1xufVxuLm5hdmlnYXRpb24tbGlzdC1tb2JpbGVfX21lbnUtLWx2bC04IHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBsZWZ0IDI1MG1zIGVhc2UtaW4tb3V0LCB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBsZWZ0IDI1MG1zIGVhc2UtaW4tb3V0LCB2aXNpYmlsaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG59XG4ubmF2aWdhdGlvbi1saXN0LW1vYmlsZV9fbWVudS0tbHZsLTguaXMtaGlkZGVuIHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBkaXNwbGF5OiBibG9jaztcbiAgbGVmdDogLTEwMCU7XG59XG4ubmF2aWdhdGlvbi1saXN0LW1vYmlsZV9fbWVudS0tbHZsLTkge1xuICAtd2Via2l0LXRyYW5zaXRpb246IGxlZnQgMjUwbXMgZWFzZS1pbi1vdXQsIHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGxlZnQgMjUwbXMgZWFzZS1pbi1vdXQsIHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbn1cbi5uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlX19tZW51LS1sdmwtOS5pcy1oaWRkZW4ge1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBsZWZ0OiAtMTAwJTtcbn1cbi5uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlX19tZW51LS1sdmwtMTAge1xuICAtd2Via2l0LXRyYW5zaXRpb246IGxlZnQgMjUwbXMgZWFzZS1pbi1vdXQsIHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGxlZnQgMjUwbXMgZWFzZS1pbi1vdXQsIHZpc2liaWxpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbn1cbi5uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlX19tZW51LS1sdmwtMTAuaXMtaGlkZGVuIHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBkaXNwbGF5OiBibG9jaztcbiAgbGVmdDogLTEwMCU7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5vcmRlci1zYW1wbGVzIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBib3JkZXItdG9wLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbiAgbWFyZ2luLXRvcDogMXJlbTtcbiAgcGFkZGluZy10b3A6IDFyZW07XG59XG4ub3JkZXItc2FtcGxlc19fdGV4dC1jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcGFkZGluZy1sZWZ0OiAxLjVyZW07XG59XG4ub3JkZXItc2FtcGxlcyAuaWNvbi0tc2FtcGxlOjpiZWZvcmUge1xuICBmb250LXNpemU6IDRyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjE7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5vcmRlci1zaWRlYmFyX19pdGVtIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIG1hcmdpbi1ib3R0b206IDEuMzMzMzMzMzMzM3JlbTtcbiAgcGFkZGluZzogMXJlbSAxcmVtIDAuNzVyZW07XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5vcmRlci1zaWRlYmFyX19pdGVtIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4ub3JkZXItc2lkZWJhcl9faXRlbS0tc3VtbWFyeSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBtYXJnaW4tdG9wOiAxLjMzMzMzMzMzMzNyZW07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHBhZGRpbmc6IDA7XG59XG4ub3JkZXItc2lkZWJhcl9faXRlbS0tc3VtbWFyeSBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLm9yZGVyLXNpZGViYXJfX2l0ZW0tLXN0YXJ0LCAub3JkZXItc2lkZWJhcl9faXRlbS0tZW5kIHtcbiAgbWFyZ2luOiAwO1xufVxuLm9yZGVyLXNpZGViYXJfX2l0ZW0tLWVuZCB7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCAxMHB4IDEwcHg7XG4gIHBhZGRpbmctdG9wOiAwLjI1cmVtO1xuICBwYWRkaW5nLWJvdHRvbTogMC4yNXJlbTtcbn1cbi5vcmRlci1zaWRlYmFyX19pdGVtLS1hcHByb3ZlLXJlcXVlc3Q6bGFzdC1vZi10eXBlIHtcbiAgbWFyZ2luLWJvdHRvbTogMS4zMzMzMzMzMzMzcmVtO1xufVxuLm9yZGVyLXNpZGViYXJfX2l0ZW0gLmxhYmVsIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5vcmRlci1zaWRlYmFyX19pdGVtLS1wYXJ0bmVyLXJlcXVlc3Qtb2ZmZXIgLmxhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLm9yZGVyLXNpZGViYXJfX2l0ZW0gLmlucHV0LFxuLm9yZGVyLXNpZGViYXJfX2l0ZW0gLnRleHRhcmVhIHtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGxpbmUtaGVpZ2h0OiAxcmVtO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgYm9yZGVyOiBub25lO1xuICBwYWRkaW5nLXRvcDogMXJlbTtcbiAgcGFkZGluZy1ib3R0b206IDFyZW07XG59XG4ub3JkZXItc2lkZWJhcl9faXRlbSAudGV4dGFyZWEge1xuICBtaW4taGVpZ2h0OiA1LjczMzMzMzMzMzNyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjJyZW07XG4gIG1heC13aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMS4xMzMzMzMzMzMzcmVtIDEuMzMzMzMzMzMzM3JlbSAxLjJyZW07XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG59XG4ub3JkZXItc2lkZWJhcl9faXRlbSAudGV4dGFyZWE6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICBjb2xvcjogI2IyYjJiMjtcbn1cbi5vcmRlci1zaWRlYmFyX19pdGVtIC50ZXh0YXJlYTo6LW1vei1wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjYjJiMmIyO1xufVxuLm9yZGVyLXNpZGViYXJfX2l0ZW0gLnRleHRhcmVhOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjYjJiMmIyO1xufVxuLm9yZGVyLXNpZGViYXJfX2l0ZW0gLnRleHRhcmVhOjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICBjb2xvcjogI2IyYjJiMjtcbn1cbi5vcmRlci1zaWRlYmFyX19pdGVtIC50ZXh0YXJlYTo6cGxhY2Vob2xkZXIge1xuICBjb2xvcjogI2IyYjJiMjtcbn1cbi5vcmRlci1zaWRlYmFyX19pdGVtIC5jdXN0b20tc2VsZWN0IC5jdXN0b20tc2VsZWN0X19zZWxlY3QsXG4ub3JkZXItc2lkZWJhcl9faXRlbSAuc2VsZWN0Mi1jb250YWluZXItLWRlZmF1bHQgLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCB7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gIGJvcmRlcjogbm9uZTtcbiAgbGluZS1oZWlnaHQ6IDNyZW07XG4gIGJhY2tncm91bmQ6ICNmZmY7XG59XG4ub3JkZXItc2lkZWJhcl9faXRlbSAuaGVhZGxpbmUge1xuICBsaW5lLWhlaWdodDogMS41O1xufVxuLm9yZGVyLXNpZGViYXJfX3RpdGxlIHtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjJyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG4ub3JkZXItc2lkZWJhcl9fdGl0bGUtLXNwYWNlLWJvdHRvbSB7XG4gIG1hcmdpbi1ib3R0b206IDAuNTMzMzMzMzMzM3JlbTtcbn1cbi5vcmRlci1zaWRlYmFyX190ZXh0IHtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xufVxuLm9yZGVyLXNpZGViYXJfX2NvbnRlbnQge1xuICBtYXJnaW4tdG9wOiAxcmVtO1xufVxuLm9yZGVyLXNpZGViYXJfX2NvbnRlbnQgLmZvcm1fX2FjdGlvbnMge1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIG1hcmdpbi10b3A6IDAuNXJlbTtcbn1cbi5vcmRlci1zaWRlYmFyX19jb250ZW50IC5mb3JtX19hY3Rpb24ge1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAub3JkZXItc2lkZWJhcl9fY29udGVudCAuZm9ybV9fYWN0aW9uIHtcbiAgICB3aWR0aDogNTAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAub3JkZXItc2lkZWJhcl9fY29udGVudCAuZm9ybV9fYWN0aW9uIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuLm9yZGVyLXNpZGViYXJfX2NvbnRlbnQgLmJ1dHRvbiB7XG4gIHdpZHRoOiAxMDAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAub3JkZXItc2lkZWJhcl9fY29udGVudCAuYnV0dG9uIHtcbiAgICB3aWR0aDogNTAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAub3JkZXItc2lkZWJhcl9fY29udGVudCAuYnV0dG9uIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuLm9yZGVyLXNpZGViYXIgLmhlYWRsaW5lIHtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBtYXJnaW46IDA7XG59XG4ub3JkZXItc2lkZWJhciAuYnV0dG9uX19sYWJlbC1jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgd2lkdGg6IDEwMCU7XG59XG4ub3JkZXItc2lkZWJhciAuYnV0dG9uX19sYWJlbCB7XG4gIHdpZHRoOiAxMDAlO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucGRwLW51bWlub3MtY29uZmlndXJhdG9yIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogcmFkaWFsLWdyYWRpZW50KGF0IGNlbnRlciBjZW50ZXIsICM2ZjZmNmYgMjglLCAjNGI0YjRkIDEwMSUpO1xuICBtYXJnaW4tdG9wOiAxLjY2NjY2NjY2NjdyZW07XG4gIHBhZGRpbmc6IDEuNXJlbSAxcmVtO1xuICB6LWluZGV4OiAyMDAxO1xufVxuLnBkcC1udW1pbm9zLWNvbmZpZ3VyYXRvcl9fcHJvZHVjdC10eXBlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG4ucGRwLW51bWlub3MtY29uZmlndXJhdG9yX19wcm9kdWN0LXR5cGUgLmljb24ge1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG4ucGRwLW51bWlub3MtY29uZmlndXJhdG9yX19wcm9kdWN0LXR5cGUgLmljb246OmJlZm9yZSB7XG4gIGZvbnQtc2l6ZTogNHJlbTtcbn1cbi5wZHAtbnVtaW5vcy1jb25maWd1cmF0b3JfX3RpdGxlLCAucGRwLW51bWlub3MtY29uZmlndXJhdG9yX190ZXh0IHtcbiAgY29sb3I6ICNmZmY7XG59XG4ucGRwLW51bWlub3MtY29uZmlndXJhdG9yX190aXRsZSB7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAucGRwLW51bWlub3MtY29uZmlndXJhdG9yIC5idXR0b24ge1xuICAgIHBhZGRpbmc6IDcuNXB4IDcuNXB4IDcuNXB4IDEuNDY2NjY2NjY2N3JlbTtcbiAgICBwYWRkaW5nOiAwLjVyZW0gMC41cmVtIDAuNXJlbSAxLjQ2NjY2NjY2NjdyZW07XG4gIH1cbiAgLnBkcC1udW1pbm9zLWNvbmZpZ3VyYXRvciAuYnV0dG9uX19pY29uLXJpZ2h0IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNjY2NjY2NjY2N3JlbTtcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucHJvZHVjdC1saXN0aW5nLW1vZGFsLXdpbmRvd19fcHJvZHVjdC1saXN0aW5nLWJveC1jb250YWluZXI6Zmlyc3QtY2hpbGQge1xuICBtYXJnaW4tdG9wOiAwO1xufVxuLnByb2R1Y3QtbGlzdGluZy1tb2RhbC13aW5kb3dfX3Byb2R1Y3QtbGlzdGluZy1ib3gtY29udGFpbmVyIHtcbiAgbWFyZ2luLXRvcDogMS41cmVtO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucmVkdWNlZC10b3AtaGVhZGVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAtbXMtZmxleC1kaXJlY3Rpb246IG5vd3JhcDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBub3dyYXA7XG4gIHBhZGRpbmc6IDAuNXJlbSAxcmVtO1xufVxuLnJlZHVjZWQtdG9wLWhlYWRlcl9fbG9nbyB7XG4gIG1pbi1oZWlnaHQ6IDMuMzMzMzMzMzMzM3JlbTtcbn1cbi5yZWR1Y2VkLXRvcC1oZWFkZXIgLmljb24tLWxvZ28ge1xuICBtaW4taGVpZ2h0OiAzLjMzMzMzMzMzMzNyZW07XG4gIG1heC1oZWlnaHQ6IDMuMzMzMzMzMzMzM3JlbTtcbiAgbWF4LXdpZHRoOiA4LjMzMzMzMzMzMzNyZW07XG4gIHBhZGRpbmc6IDAuMjVyZW07XG59XG4ucmVkdWNlZC10b3AtaGVhZGVyX19saXN0LW1vYmlsZSB7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcbiAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5yZWR1Y2VkLXRvcC1oZWFkZXJfX2xpc3QtZGVza3RvcCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAtbXMtZmxleC1pdGVtLWFsaWduOiBjZW50ZXI7XG4gICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG59XG4ucmVkdWNlZC10b3AtaGVhZGVyX19saXN0IHtcbiAgbWluLWhlaWdodDogMi40NjY2NjY2NjY3cmVtO1xufVxuLnJlZHVjZWQtdG9wLWhlYWRlcl9fbGlzdCAudXNwLWVudHJ5IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1hcmdpbi1yaWdodDogMXJlbTtcbiAgbWFyZ2luLWxlZnQ6IDFyZW07XG59XG4ucmVkdWNlZC10b3AtaGVhZGVyX19saXN0IC5pY29uIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjI1cmVtO1xufVxuLnJlZHVjZWQtdG9wLWhlYWRlcl9fbGlzdCAuaWNvbiBzdmcge1xuICB3aWR0aDogMnJlbTtcbiAgaGVpZ2h0OiAycmVtO1xufVxuLnJlZHVjZWQtdG9wLWhlYWRlcl9fbGlzdCAuaWNvbiBzdmcge1xuICBtaW4td2lkdGg6IHVuc2V0O1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uYWN0aW9uLWNhcmQge1xuICBwYWRkaW5nOiAxLjVyZW07XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG59XG4uYWN0aW9uLWNhcmRfX2hlYWRlciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5hY3Rpb24tY2FyZF9fdGl0bGUge1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXgtcG9zaXRpdmU6IDE7XG4gICAgICAgICAgZmxleC1ncm93OiAxO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuLmFjdGlvbi1jYXJkX19hY3Rpb25zIHtcbiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gICAgICBmbGV4LXNocmluazogMDtcbn1cbi5hY3Rpb24tY2FyZF9fY29udGVudCB7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgbGluZS1oZWlnaHQ6IDIycHg7XG59XG4uYWN0aW9uLWNhcmQtLWJnLWdyYXktMSB7XG4gIGJhY2tncm91bmQ6ICNlY2VjZWM7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5hY3Rpb24tY2FyZC1ncmlkIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIG1hcmdpbjogLTAuNXJlbTtcbiAgd2lkdGg6IGNhbGMoMTAwJSArIDFyZW0pO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuYWN0aW9uLWNhcmQtZ3JpZCB7XG4gICAgLXdlYmtpdC1ib3gtcGFjazogZW5kO1xuICAgICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICB9XG59XG4uYWN0aW9uLWNhcmQtZ3JpZF9fY2FyZCB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAwLjVyZW07XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4OiAxO1xuICAgICAgICAgIGZsZXg6IDE7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5hamF4LW1vZGFsLXdpbmRvd19fY29udGVudC1jb250YWluZXItLWhhcy1lcnJvciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmJhY2stcm93LWJ1dHRvbiB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmJhY2stcm93LWJ1dHRvbl9fYnV0dG9uIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gIHdpZHRoOiAxMDAlO1xuICBsaW5lLWhlaWdodDogMnJlbTtcbn1cbi5iYWNrLXJvdy1idXR0b25fX2J1dHRvbiBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmJhY2stcm93LWJ1dHRvbl9fY2FyZXQge1xuICBmb250LXNpemU6IDEuMzMzMzMzMzMzM3JlbTtcbiAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xufVxuLmJhY2stcm93LWJ1dHRvbl9fY2FyZXQgc3ZnIHtcbiAgd2lkdGg6IDEuMzMzMzMzMzMzM3JlbTtcbiAgaGVpZ2h0OiAxLjMzMzMzMzMzMzNyZW07XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5iYW5uZXIge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBoZWlnaHQ6IDEzLjMzMzMzMzMzMzNyZW07XG4gIG1hcmdpbi1ib3R0b206IDAuNjY2NjY2NjY2N3JlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZlY2MwMDtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmJhbm5lciB7XG4gICAgaGVpZ2h0OiAzMHJlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAycmVtO1xuICB9XG59XG4uYmFubmVyLS1tZWRpdW0ge1xuICBoZWlnaHQ6IDI2LjY2NjY2NjY2NjdyZW07XG59XG4uYmFubmVyLS1zbWFsbCB7XG4gIGhlaWdodDogMTMuMzMzMzMzMzMzM3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmJhbm5lci0tc21hbGwge1xuICAgIGhlaWdodDogMjIuNjY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLmJhbm5lci0tc3VjY2VzcyB7XG4gIGhlaWdodDogYXV0bztcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmJhbm5lci0tc3VjY2VzcyB7XG4gICAgaGVpZ2h0OiAzMHJlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAyLjY2NjY2NjY2NjdyZW07XG4gIH1cbn1cbi5iYW5uZXItLWNvbG9yLXNlY29uZCB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLmJhbm5lcl9fY29udGFpbmVyIHtcbiAgbWluLWhlaWdodDogMTAwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6IDAgMC42NjY2NjY2NjY3cmVtO1xuICBtYXJnaW46IDAgMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmJhbm5lcl9fY29udGFpbmVyIHtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuYmFubmVyX19jb250YWluZXIge1xuICAgIHBhZGRpbmc6IDAgMnJlbTtcbiAgfVxufVxuLmJhbm5lcl9fY29udGFpbmVyLS1zdWNjZXNzIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAxLjMzMzMzMzMzMzNyZW0gMXJlbSAxLjczMzMzMzMzMzNyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5iYW5uZXJfX2NvbnRhaW5lci0tc3VjY2VzcyB7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbi5iYW5uZXJfX3RpdGxlLCAuYmFubmVyX190ZXh0IHtcbiAgY29sb3I6ICNmZmY7XG59XG4uYmFubmVyX190aXRsZSB7XG4gIGZvbnQtc2l6ZTogMS43MzMzMzMzMzMzcmVtO1xuICBsaW5lLWhlaWdodDogMnJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgbWFyZ2luLWJvdHRvbTogMC42NjY2NjY2NjY3cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuYmFubmVyX190aXRsZSB7XG4gICAgZm9udC1zaXplOiAycmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAycmVtO1xuICAgIG1hcmdpbi1ib3R0b206IDAuODY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLmJhbm5lcl9fdGV4dCB7XG4gIGZvbnQtc2l6ZTogMS4wNjY2NjY2NjY3cmVtO1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBmb250LXdlaWdodDogNDAwO1xuICBtYXJnaW4tYm90dG9tOiAxLjczMzMzMzMzMzNyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5iYW5uZXJfX3RleHQge1xuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICAgIG1hcmdpbi1ib3R0b206IDIuMzMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLmJhbm5lcl9fdGV4dC0tc3VidGl0bGUge1xuICBmb250LWZhbWlseTogXCJMYXRvXCIsIHNhbnMtc2VyaWY7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5iYW5uZXJfX3RleHQtLXN1YnRpdGxlIHtcbiAgICBmb250LXNpemU6IDIuNTMzMzMzMzMzM3JlbTtcbiAgICBsaW5lLWhlaWdodDogMi42NjY2NjY2NjY3cmVtO1xuICB9XG59XG4uYmFubmVyX19zdWNjZXNzLXRpdGxlIHtcbiAgZm9udC1zaXplOiAyLjEzMzMzMzMzMzNyZW07XG4gIGxpbmUtaGVpZ2h0OiAyLjI2NjY2NjY2NjdyZW07XG4gIGNvbG9yOiAjZmZmO1xuICBtYXJnaW4tYm90dG9tOiAwLjczMzMzMzMzMzNyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5iYW5uZXJfX3N1Y2Nlc3MtdGl0bGUge1xuICAgIG1hcmdpbi1ib3R0b206IDIuMTMzMzMzMzMzM3JlbTtcbiAgICBmb250LXNpemU6IDMuMzMzMzMzMzMzM3JlbTtcbiAgICBsaW5lLWhlaWdodDogMy42NjY2NjY2NjY3cmVtO1xuICB9XG59XG4uYmFubmVyX19zdWNjZXNzLXRleHQge1xuICBmb250LXNpemU6IDEuMnJlbTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDJyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5iYW5uZXJfX3N1Y2Nlc3MtdGV4dCB7XG4gICAgZm9udC1zaXplOiAxLjQ2NjY2NjY2NjdyZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDI2NjY2NjY2N3JlbTtcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uYnJlYWRjcnVtYi0tcHJvZ3Jlc3Mge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmJyZWFkY3J1bWItLXByb2dyZXNzIHtcbiAgICBwYWRkaW5nOiAxLjA2NjY2NjY2NjdyZW0gMDtcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uYmFzaWMtZm9ybSAuaGVhZGxpbmUge1xuICBwYWRkaW5nOiAxcmVtIDA7XG4gIGZvbnQtc2l6ZTogMi40cmVtO1xufVxuLmJhc2ljLWZvcm1fX2Rlc2NyaXB0aW9uIHtcbiAgcGFkZGluZzogMXJlbSAwO1xufVxuLmJhc2ljLWZvcm1fX2hlYWRsaW5lLXVwbG9hZC1kYXRhLmhlYWRsaW5lLCAuYmFzaWMtZm9ybV9faGVhZGxpbmUtcGVyc29uYWwtZGF0YS5oZWFkbGluZSwgLmJhc2ljLWZvcm1fX2hlYWRsaW5lLWFsdGVybmF0aXZlLWRhdGEuaGVhZGxpbmUsIC5iYXNpYy1mb3JtX19oZWFkbGluZS1tZXNzYWdlLmhlYWRsaW5lIHtcbiAgcGFkZGluZzogM3JlbSAwIDAuNXJlbTtcbiAgZm9udC1zaXplOiAxLjJyZW07XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLmJhc2ljLWZvcm1fX3ZlbmRvci1kYXRhLCAuYmFzaWMtZm9ybV9fbmV3c2xldHRlciB7XG4gIHBhZGRpbmctdG9wOiAxcmVtO1xufVxuLmJhc2ljLWZvcm1fX3RvcyB7XG4gIHBhZGRpbmc6IDFyZW0gMDtcbn1cbi5iYXNpYy1mb3JtX19jaGVjayB7XG4gIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gIGhlaWdodDogMCAhaW1wb3J0YW50O1xuICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xufVxuLmJhc2ljLWZvcm1fX2NoZWNrICoge1xuICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICBoZWlnaHQ6IDAgIWltcG9ydGFudDtcbiAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgYm9yZGVyOiBub25lO1xufVxuXG4uY29udGFjdC1sb2NrLW1vZGFsLXdpbmRvdyAubW9kYWwtd2luZG93X19jb250YWluZXIge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbi5jb250YWN0LWxvY2stbW9kYWwtd2luZG93X19mb3JtLXN1Ym1pdCB7XG4gIG1hcmdpbi10b3A6IDAuNzVyZW07XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAtd2Via2l0LWJveC1hbGlnbjogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5jb250YWN0LWxvY2stbW9kYWwtd2luZG93X19mb3JtLXN1Ym1pdCAuYnV0dG9uIHtcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBlbmQ7XG4gICAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jb250YWN0LWxvY2stbW9kYWwtd2luZG93X19mb3JtLXN1Ym1pdCB7XG4gICAgLXdlYmtpdC1ib3gtYWxpZ246IHN0YXJ0O1xuICAgICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgfVxufVxuLmNvbnRhY3QtbG9jay1tb2RhbC13aW5kb3dfX2Zvcm0tc3VibWl0IC5jaGVja2JveF9fY29udGFpbmVyIHtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IHN0YXJ0O1xuICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBwYWRkaW5nOiAwLjVyZW0gMDtcbn1cbi5jb250YWN0LWxvY2stbW9kYWwtd2luZG93X19kYXRhLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuICBncmlkLXRlbXBsYXRlLWFyZWFzOiBcImN1c3RvbWVyTnVtYmVyXCIgXCJjb21wYW55XCIgXCJicmFuY2hcIiBcImRlcGFydG1lbnRQb3NpdGlvblwiIFwiZmlyc3ROYW1lXCIgXCJsYXN0TmFtZVwiIFwiZW1haWxcIiBcInRvc1wiO1xuICBncmlkLWdhcDogMXJlbTtcbiAgbWFyZ2luLXRvcDogMC43NXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLmNvbnRhY3QtbG9jay1tb2RhbC13aW5kb3dfX2RhdGEtY29udGFpbmVyIHtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7XG4gICAgZ3JpZC10ZW1wbGF0ZS1hcmVhczogXCJjdXN0b21lck51bWJlciBjb21wYW55XCIgXCJicmFuY2ggZGVwYXJ0bWVudFBvc2l0aW9uXCIgXCJmaXJzdE5hbWUgbGFzdE5hbWVcIiBcImVtYWlsIHRvc1wiO1xuICB9XG59XG4uY29udGFjdC1sb2NrLW1vZGFsLXdpbmRvd19fZGF0YS1jb250YWluZXIgLmNvbnRhY3QtbG9jay1tb2RhbC13aW5kb3dfX2N1c3RvbWVyLW51bWJlciB7XG4gIGdyaWQtYXJlYTogY3VzdG9tZXJOdW1iZXI7XG59XG4uY29udGFjdC1sb2NrLW1vZGFsLXdpbmRvd19fZGF0YS1jb250YWluZXIgLmNvbnRhY3QtbG9jay1tb2RhbC13aW5kb3dfX2NvbXBhbnkge1xuICBncmlkLWFyZWE6IGNvbXBhbnk7XG59XG4uY29udGFjdC1sb2NrLW1vZGFsLXdpbmRvd19fZGF0YS1jb250YWluZXIgLmNvbnRhY3QtbG9jay1tb2RhbC13aW5kb3dfX2JyYW5jaCB7XG4gIGdyaWQtYXJlYTogYnJhbmNoO1xufVxuLmNvbnRhY3QtbG9jay1tb2RhbC13aW5kb3dfX2RhdGEtY29udGFpbmVyIC5jb250YWN0LWxvY2stbW9kYWwtd2luZG93X19kZXBhcnRtZW50LXBvc2l0aW9uIHtcbiAgZ3JpZC1hcmVhOiBkZXBhcnRtZW50UG9zaXRpb247XG59XG4uY29udGFjdC1sb2NrLW1vZGFsLXdpbmRvd19fZGF0YS1jb250YWluZXIgLmNvbnRhY3QtbG9jay1tb2RhbC13aW5kb3dfX2ZpcnN0LW5hbWUge1xuICBncmlkLWFyZWE6IGZpcnN0TmFtZTtcbn1cbi5jb250YWN0LWxvY2stbW9kYWwtd2luZG93X19kYXRhLWNvbnRhaW5lciAuY29udGFjdC1sb2NrLW1vZGFsLXdpbmRvd19fbGFzdC1uYW1lIHtcbiAgZ3JpZC1hcmVhOiBsYXN0TmFtZTtcbn1cbi5jb250YWN0LWxvY2stbW9kYWwtd2luZG93X19kYXRhLWNvbnRhaW5lciAuY29udGFjdC1sb2NrLW1vZGFsLXdpbmRvd19fZW1haWwge1xuICBncmlkLWFyZWE6IGVtYWlsO1xufVxuLmNvbnRhY3QtbG9jay1tb2RhbC13aW5kb3dfX2RhdGEtY29udGFpbmVyIC5jb250YWN0LWxvY2stbW9kYWwtd2luZG93X190b3Mge1xuICBncmlkLWFyZWE6IHRvcztcbn1cbi5jb250YWN0LWxvY2stbW9kYWwtd2luZG93X19kYXRhLWNvbnRhaW5lciAuY29udGFjdC1sb2NrLW1vZGFsLXdpbmRvd19zcGFjZS0xIHtcbiAgZ3JpZC1hcmVhOiBzcGFjZTE7XG59XG4uY29udGFjdC1sb2NrLW1vZGFsLXdpbmRvd19fZGF0YS1jb250YWluZXIgLmNvbnRhY3QtbG9jay1tb2RhbC13aW5kb3dfc3BhY2UtMiB7XG4gIGdyaWQtYXJlYTogc3BhY2UyO1xufVxuLmNvbnRhY3QtbG9jay1tb2RhbC13aW5kb3cgLmNvbnRhY3QtbG9jay1tb2RhbC13aW5kb3cgLmhlYWRsaW5lIHtcbiAgcGFkZGluZzogMXJlbSAwO1xuICBmb250LXNpemU6IDIuNHJlbTtcbn1cbi5jb250YWN0LWxvY2stbW9kYWwtd2luZG93IC5jb250YWN0LWxvY2stbW9kYWwtd2luZG93X19kZXNjcmlwdGlvbiB7XG4gIHBhZGRpbmc6IDFyZW0gMDtcbn1cbi5jb250YWN0LWxvY2stbW9kYWwtd2luZG93IC5jb250YWN0LWxvY2stbW9kYWwtd2luZG93X19oZWFkbGluZS11cGxvYWQtZGF0YS5oZWFkbGluZSwgLmNvbnRhY3QtbG9jay1tb2RhbC13aW5kb3cgLmNvbnRhY3QtbG9jay1tb2RhbC13aW5kb3dfX2hlYWRsaW5lLXBlcnNvbmFsLWRhdGEuaGVhZGxpbmUsIC5jb250YWN0LWxvY2stbW9kYWwtd2luZG93IC5jb250YWN0LWxvY2stbW9kYWwtd2luZG93X19oZWFkbGluZS1hbHRlcm5hdGl2ZS1kYXRhLmhlYWRsaW5lLCAuY29udGFjdC1sb2NrLW1vZGFsLXdpbmRvdyAuY29udGFjdC1sb2NrLW1vZGFsLXdpbmRvd19faGVhZGxpbmUtbWVzc2FnZS5oZWFkbGluZSB7XG4gIHBhZGRpbmc6IDNyZW0gMCAwLjVyZW07XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5jb250YWN0LWxvY2stbW9kYWwtd2luZG93IC5jb250YWN0LWxvY2stbW9kYWwtd2luZG93X192ZW5kb3ItZGF0YSwgLmNvbnRhY3QtbG9jay1tb2RhbC13aW5kb3cgLmNvbnRhY3QtbG9jay1tb2RhbC13aW5kb3dfX25ld3NsZXR0ZXIge1xuICBwYWRkaW5nLXRvcDogMXJlbTtcbn1cbi5jb250YWN0LWxvY2stbW9kYWwtd2luZG93IC5jb250YWN0LWxvY2stbW9kYWwtd2luZG93X190b3Mge1xuICBwYWRkaW5nOiAxcmVtIDA7XG59XG4uY29udGFjdC1sb2NrLW1vZGFsLXdpbmRvdyAuY29udGFjdC1sb2NrLW1vZGFsLXdpbmRvd19fY2hlY2sge1xuICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICBoZWlnaHQ6IDAgIWltcG9ydGFudDtcbiAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbn1cbi5jb250YWN0LWxvY2stbW9kYWwtd2luZG93IC5jb250YWN0LWxvY2stbW9kYWwtd2luZG93X19jaGVjayAqIHtcbiAgd2lkdGg6IDAgIWltcG9ydGFudDtcbiAgaGVpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gIGJvcmRlcjogbm9uZTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvdW50cnktbGlzdF9fbW9kYWwge1xuICBkaXNwbGF5OiBub25lO1xufVxuLmNvdW50cnktbGlzdF9fbW9kYWwtaW5uZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uY291bnRyeS1saXN0X19zdG9yZS1jb250YWluZXIsIC5jb3VudHJ5LWxpc3RfX2ludGVybmF0aW9uYWwtY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xuICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDEwMCU7XG4gICAgICBmbGV4LWJhc2lzOiAxMDAlO1xufVxuLmNvdW50cnktbGlzdF9faW50ZXJuYXRpb25hbC1jb250YWluZXIge1xuICBib3JkZXItdG9wLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbiAgcGFkZGluZy10b3A6IDFyZW07XG4gIG1hcmdpbi10b3A6IDFyZW07XG59XG4uY291bnRyeS1saXN0X19jb250YWluZXItaW5uZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGNhbGMoMzMuMzMzMzMzMzMzMyUgLSAxLjVyZW0pO1xuICAgICAgZmxleC1iYXNpczogY2FsYygzMy4zMzMzMzMzMzMzJSAtIDEuNXJlbSk7XG4gIG1hcmdpbi1ib3R0b206IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jb3VudHJ5LWxpc3RfX2NvbnRhaW5lci1pbm5lcjpudGgtY2hpbGQoM24rMyksIC5jb3VudHJ5LWxpc3RfX2NvbnRhaW5lci1pbm5lcjpudGgtY2hpbGQoM24rNCkge1xuICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICB9XG59XG4uY291bnRyeS1saXN0X19jb250YWluZXItaW5uZXItLWludGVybmF0aW9uYWwge1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMTAwJTtcbiAgICAgIGZsZXgtYmFzaXM6IDEwMCU7XG59XG4uY291bnRyeS1saXN0X19jbG9zZS1idXR0b24ge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGVuZDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICB3aWR0aDogMTAwJTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xufVxuLmNvdW50cnktbGlzdF9fY291bnRyeS1jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4uY291bnRyeS1saXN0X19jb3VudHJ5IHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMTtcbn1cbi5jb3VudHJ5LWxpc3RfX2ltZyB7XG4gIHdpZHRoOiAzcmVtO1xuICBtYXgtd2lkdGg6IHVuc2V0O1xuICBtYXgtaGVpZ2h0OiB1bnNldDtcbn1cbi5jb3VudHJ5LWxpc3RfX2ltYWdlLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbi5jb3VudHJ5LWxpc3RfX2ltYWdlLWhlYWRsaW5lIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMTAwJTtcbiAgICAgIGZsZXgtYmFzaXM6IDEwMCU7XG4gIHBhZGRpbmctYm90dG9tOiAxcmVtO1xufVxuLmNvdW50cnktbGlzdF9fbGFuZ3VhZ2UtY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgcGFkZGluZy10b3A6IDAuMjVyZW07XG59XG4uY291bnRyeS1saXN0X19sYW5ndWFnZS1zZWxlY3Qge1xuICBsaW5lLWhlaWdodDogMS4xO1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbn1cbi5jb3VudHJ5LWxpc3RfX3NlcGFyYXRvciB7XG4gIHBhZGRpbmc6IDAgMC41cmVtO1xuICBsaW5lLWhlaWdodDogMS4xO1xufVxuLmNvdW50cnktbGlzdF9fbmFtZSB7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xufVxuLmNvdW50cnktbGlzdC0tZm9vdGVyIC5jb3VudHJ5LWxpc3RfX2NvbnRhaW5lci1pbm5lciwgLmNvdW50cnktbGlzdC0tY291bnRyeS1zZWxlY3QtcGFnZSAuY291bnRyeS1saXN0X19jb250YWluZXItaW5uZXIge1xuICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gIHdpZHRoOiAxMDAlO1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMTAwJTtcbiAgICAgIGZsZXgtYmFzaXM6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5jb3VudHJ5LWxpc3QtLWZvb3RlciAuY291bnRyeS1saXN0X19jb250YWluZXItaW5uZXIsIC5jb3VudHJ5LWxpc3QtLWNvdW50cnktc2VsZWN0LXBhZ2UgLmNvdW50cnktbGlzdF9fY29udGFpbmVyLWlubmVyIHtcbiAgICB3aWR0aDogNTAlO1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiA1MCU7XG4gICAgICAgIGZsZXgtYmFzaXM6IDUwJTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY291bnRyeS1saXN0LS1mb290ZXIgLmNvdW50cnktbGlzdF9fY29udGFpbmVyLWlubmVyLCAuY291bnRyeS1saXN0LS1jb3VudHJ5LXNlbGVjdC1wYWdlIC5jb3VudHJ5LWxpc3RfX2NvbnRhaW5lci1pbm5lciB7XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGNhbGMoMzMuMzMzMzMzMzMzMyUgLSAxLjVyZW0pO1xuICAgICAgICBmbGV4LWJhc2lzOiBjYWxjKDMzLjMzMzMzMzMzMzMlIC0gMS41cmVtKTtcbiAgICB3aWR0aDogY2FsYygzMy4zMzMzMzMzMzMzJSAtIDEuNXJlbSk7XG4gIH1cbn1cbi5jb3VudHJ5LWxpc3QtLWZvb3RlciB7XG4gIGJvcmRlci10b3Atd2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjNmY2ZjZmO1xufVxuLmNvdW50cnktbGlzdC0tZm9vdGVyIC5jb3VudHJ5LWxpc3RfX2xhbmd1YWdlLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAgICAgICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIHBhZGRpbmctdG9wOiAwLjVyZW07XG59XG4uY291bnRyeS1saXN0LS1mb290ZXI6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IG5vbmU7XG59XG4uY291bnRyeS1saXN0LS1mb290ZXIgLmNvdW50cnktbGlzdF9faW50ZXJuYXRpb25hbC1jb250YWluZXIge1xuICBib3JkZXI6IG5vbmU7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbiAgLXdlYmtpdC1ib3gtb3JkaW5hbC1ncm91cDogMjtcbiAgICAgIC1tcy1mbGV4LW9yZGVyOiAxO1xuICAgICAgICAgIG9yZGVyOiAxO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmNvdW50cnktbGlzdC0tZm9vdGVyIC5jb3VudHJ5LWxpc3RfX2ludGVybmF0aW9uYWwtY29udGFpbmVyIHtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogY2FsYygzMy4zMzMzMzMzMzMzJSAtIDEuNXJlbSk7XG4gICAgICAgIGZsZXgtYmFzaXM6IGNhbGMoMzMuMzMzMzMzMzMzMyUgLSAxLjVyZW0pO1xuICB9XG59XG4uY291bnRyeS1saXN0LS1mb290ZXIgLmNvdW50cnktbGlzdF9fc3RvcmUtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLXRvcDogMS41cmVtO1xuICBtYXJnaW4tdG9wOiAxLjVyZW07XG4gIC13ZWJraXQtYm94LW9yZGluYWwtZ3JvdXA6IDM7XG4gICAgICAtbXMtZmxleC1vcmRlcjogMjtcbiAgICAgICAgICBvcmRlcjogMjtcbn1cbi5jb3VudHJ5LWxpc3QtLWZvb3RlciAuY291bnRyeS1saXN0X19zdG9yZS1jb250YWluZXI6OmJlZm9yZSB7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjNmY2ZjZmO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHdpZHRoOiAxMDB2dztcbiAgdG9wOiAwO1xuICBsZWZ0OiAtMnJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5jb3VudHJ5LWxpc3QtLWZvb3RlciAuY291bnRyeS1saXN0X19zdG9yZS1jb250YWluZXIge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbjogMCAwIDAgMS41cmVtO1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiA2Ni42NjY2NjY2NjY3JTtcbiAgICAgICAgZmxleC1iYXNpczogNjYuNjY2NjY2NjY2NyU7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLmNvdW50cnktbGlzdC0tZm9vdGVyIC5jb3VudHJ5LWxpc3RfX3N0b3JlLWNvbnRhaW5lcjo6YmVmb3JlIHtcbiAgICBjb250ZW50OiBub25lO1xuICB9XG59XG4uY291bnRyeS1saXN0LS1mb290ZXIgLmNvdW50cnktbGlzdF9fY29udGFpbmVyLWlubmVyIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG4uY291bnRyeS1saXN0LS1mb290ZXIgLmNvdW50cnktbGlzdF9fY29udGFpbmVyLWlubmVyLS1pbnRlcm5hdGlvbmFsIHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLmNvdW50cnktbGlzdC0tZm9vdGVyIC5jb3VudHJ5LWxpc3RfX2NvbnRhaW5lci1pbm5lci0taW50ZXJuYXRpb25hbCAuY291bnRyeS1saXN0X19sYW5ndWFnZS1jb250YWluZXIge1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5jb3VudHJ5LWxpc3QtLWZvb3RlciAuY291bnRyeS1saXN0X19jb250YWluZXItaW5uZXItLWludGVybmF0aW9uYWwgLmNvdW50cnktbGlzdF9fbGFuZ3VhZ2UtY29udGFpbmVyIHtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gICAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAgIC1tcy1mbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAgICAgICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgfVxufVxuLmNvdW50cnktbGlzdC0tY291bnRyeS1zZWxlY3QtcGFnZSB7XG4gIGhlaWdodDogMTAwJTtcbiAgbWFyZ2luOiAxcmVtIDA7XG59XG4uY291bnRyeS1saXN0LS1jb3VudHJ5LXNlbGVjdC1wYWdlIC5jb3VudHJ5LWxpc3RfX21vZGFsIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1pbi1oZWlnaHQ6IDQwcmVtO1xuICBiYWNrZ3JvdW5kOiAjZDBkMGQwO1xuICBwYWRkaW5nOiAzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY291bnRyeS1saXN0LS1jb3VudHJ5LXNlbGVjdC1wYWdlIC5jb3VudHJ5LWxpc3RfX21vZGFsIHtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG4gIH1cbn1cbi5jb3VudHJ5LWxpc3QtLWNvdW50cnktc2VsZWN0LXBhZ2UgLmNvdW50cnktbGlzdF9fbGFuZ3VhZ2UtY29udGFpbmVyIHtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG59XG4uY291bnRyeS1saXN0LS1jb3VudHJ5LXNlbGVjdC1wYWdlIC5jb3VudHJ5LWxpc3RfX2ludGVybmF0aW9uYWwtY29udGFpbmVyIHtcbiAgYm9yZGVyOiBub25lO1xufVxuLmNvdW50cnktbGlzdC0tY291bnRyeS1zZWxlY3QtcGFnZSAuY291bnRyeS1saXN0X19jb250YWluZXItaW5uZXIge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG59XG4uY291bnRyeS1saXN0LS1jb3VudHJ5LXNlbGVjdC1wYWdlIC5jb3VudHJ5LWxpc3RfX3N0b3JlLWNvbnRhaW5lciB7XG4gIG1pbi1oZWlnaHQ6IDIwcmVtO1xufVxuLmNvdW50cnktbGlzdC0tc2lkZS1kcmF3ZXIge1xuICBib3JkZXItdG9wOiBub25lO1xufVxuLmNvdW50cnktbGlzdC0tc2lkZS1kcmF3ZXIuY291bnRyeS1zZWxlY3Rpb25fX2NvbnRhaW5lci0tc2hvdzo6YmVmb3JlIHtcbiAgY29udGVudDogbm9uZTtcbn1cbi5jb3VudHJ5LWxpc3QtLXNpZGUtZHJhd2VyIC5jb3VudHJ5LWxpc3RfX2NvbnRhaW5lci1pbm5lciB7XG4gIHdpZHRoOiAxMDAlO1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMTAwJTtcbiAgICAgIGZsZXgtYmFzaXM6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuY291bnRyeS1saXN0LS1zaWRlLWRyYXdlciAuY291bnRyeS1saXN0X19zdG9yZS1jb250YWluZXIge1xuICAgIG1hcmdpbjogMS41cmVtIDAgMCAwO1xuICAgIHBhZGRpbmctdG9wOiAxLjVyZW07XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLmNvdW50cnktbGlzdC0tc2lkZS1kcmF3ZXIgLmNvdW50cnktbGlzdF9fc3RvcmUtY29udGFpbmVyOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gIH1cbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvdW50cnktc2VsZWN0aW9uX19jb250YWluZXItLXNob3cge1xuICBkaXNwbGF5OiBibG9jaztcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAuMnJlbSAwIDAgI2ZmZiwgMCAtMC4ycmVtIDAgMCAjZmZmLCAwLjJyZW0gMCAwLjJyZW0gMCByZ2JhKDAsIDAsIDAsIDAuMiksIC0wLjJyZW0gMCAwLjJyZW0gMCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwLjJyZW0gMCAwICNmZmYsIDAgLTAuMnJlbSAwIDAgI2ZmZiwgMC4ycmVtIDAgMC4ycmVtIDAgcmdiYSgwLCAwLCAwLCAwLjIpLCAtMC4ycmVtIDAgMC4ycmVtIDAgcmdiYSgwLCAwLCAwLCAwLjIpO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uY291bnRyeS1zZWxlY3Rpb25fX2NvbnRhaW5lci0tc2hvdzo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgY29udGVudDogXCJcIjtcbiAgbGVmdDogMC42cmVtO1xuICByaWdodDogMC42cmVtO1xuICBib3R0b206IDA7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgYm9yZGVyLWJvdHRvbTogMC4ycmVtIHNvbGlkICNmZWNjMDA7XG4gIHotaW5kZXg6IDEwMDtcbn1cbi5jb3VudHJ5LXNlbGVjdGlvbl9fY29udGFpbmVyLS1zaG93OjpiZWZvcmUgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi5jb3VudHJ5LXNlbGVjdGlvbl9fY29udGFpbmVyLS1zaG93IC5jb3VudHJ5LWxpc3RfX21vZGFsIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMC4zMzMzMzMzMzMzcmVtIDA7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAuMzMzMzMzMzMzM3JlbSAwO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiA5O1xuICByaWdodDogMDtcbiAgcGFkZGluZzogMS41cmVtO1xuICB3aWR0aDogNDhyZW07XG59XG4uY291bnRyeS1zZWxlY3Rpb25fX2NvbnRhaW5lci0tc2hvdyAuY291bnRyeS1saXN0X19tb2RhbCBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmNvdW50cnktc2VsZWN0aW9uX19jb250YWluZXItLXNob3cgLmNvdW50cnktc2VsZWN0aW9uX19pbnRlcm5hdGlvbmFsaXphdGlvbi1jb250YWluZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5jb3VudHJ5LXNlbGVjdGlvbl9fY29udGFpbmVyLS1zaG93IC5jb3VudHJ5LXNlbGVjdGlvbl9faW50ZXJuYXRpb25hbGl6YXRpb24tY29udGFpbmVyIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4uY291bnRyeS1zZWxlY3Rpb25fX2ludGVybmF0aW9uYWxpemF0aW9uLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAwIDAuNXJlbTtcbiAgei1pbmRleDogMTA7XG4gIGxpbmUtaGVpZ2h0OiAyLjUzMjtcbn1cbi5jb3VudHJ5LXNlbGVjdGlvbiAuYnV0dG9uIHtcbiAgcGFkZGluZzogMDtcbn1cbi5jb3VudHJ5LXNlbGVjdGlvbiAuYnV0dG9uIC5pY29uLS1pbnRlcm5hdGlvbmFsLCAuY291bnRyeS1zZWxlY3Rpb24gLmJ1dHRvbl9faWNvbi1sZWZ0LWNvbnRhaW5lciB7XG4gIG1hcmdpbjogMDtcbn1cbi5jb3VudHJ5LXNlbGVjdGlvbiAuYnV0dG9uIHN2ZyB7XG4gIGZpbGw6ICNmZmY7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5kYXRlLXBpY2tlcl9fY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uZGF0ZS1waWNrZXJfX2NvbnRhaW5lclt2LWNsb2FrXSAuaWNvbiB7XG4gIGNvbG9yOiAjYjJiMmIyO1xufVxuLmRhdGUtcGlja2VyX19jb250YWluZXI6bm90KFt2LWNsb2FrXSkgLmljb24ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLmRhdGUtcGlja2VyX19jb250YWluZXI6bm90KFt2LWNsb2FrXSkgLmljb246aG92ZXIge1xuICBjb2xvcjogI2ZlY2MwMDtcbn1cbi5kYXRlLXBpY2tlciBpbnB1dCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmRhdGUtcGlja2VyIC5pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBmb250LXNpemU6IDJyZW07XG4gIHJpZ2h0OiAwLjUzMzMzMzMzMzNyZW07XG59XG4uZGF0ZS1waWNrZXIgLnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciB7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICB0b3A6IDMwJTtcbiAgei1pbmRleDogNTAwO1xufVxuLmRhdGUtcGlja2VyIC52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLmNlbGw6bm90KC5kaXNhYmxlZCk6bm90KC5ibGFuaykuZGF5LCAuZGF0ZS1waWNrZXIgLnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciAuY2VsbDpub3QoLmRpc2FibGVkKTpub3QoLmJsYW5rKS5tb250aCwgLmRhdGUtcGlja2VyIC52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLmNlbGw6bm90KC5kaXNhYmxlZCk6bm90KC5ibGFuaykueWVhciB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLmRhdGUtcGlja2VyIC52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLmNlbGw6bm90KC5kaXNhYmxlZCk6bm90KC5ibGFuaykuZGF5OmhvdmVyLCAuZGF0ZS1waWNrZXIgLnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciAuY2VsbDpub3QoLmRpc2FibGVkKTpub3QoLmJsYW5rKS5tb250aDpob3ZlciwgLmRhdGUtcGlja2VyIC52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLmNlbGw6bm90KC5kaXNhYmxlZCk6bm90KC5ibGFuaykueWVhcjpob3ZlciB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbiAgYm9yZGVyLWNvbG9yOiAjZmVjYzAwICFpbXBvcnRhbnQ7XG59XG4uZGF0ZS1waWNrZXIgLnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciAuY2VsbC5zZWxlY3RlZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWNjMDA7XG59XG4uZGF0ZS1waWNrZXIgLnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciAuY2VsbC5zZWxlY3RlZDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWNjMDA7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5kb3dubG9hZHMge1xuICB3aWR0aDogMTAwJTtcbn1cbi5kb3dubG9hZHMtLWNvbmZpZ3VyYXRvciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBwYWRkaW5nOiAwLjVyZW0gMDtcbn1cbi5kb3dubG9hZHMtLWNvbmZpZ3VyYXRvciBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uZWRpdGFibGUtdGV4dGFyZWEgdGV4dGFyZWEge1xuICBib3JkZXI6IDFweCBzb2xpZCAjZDBkMGQwO1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgcGFkZGluZzogMC45MzMzMzMzMzMzcmVtIDEuMzMzMzMzMzMzM3JlbTtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIHdpZHRoOiAxMDAlO1xufVxuLmVkaXRhYmxlLXRleHRhcmVhIGJ1dHRvbiB7XG4gIG1hcmdpbi10b3A6IDFyZW07XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5lbmVyZ3ktbGFiZWwge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xufVxuLmVuZXJneS1sYWJlbCBzdmcge1xuICB3aWR0aDogMnJlbTtcbiAgaGVpZ2h0OiAycmVtO1xufVxuLmVuZXJneS1sYWJlbF9fZWVrLWEge1xuICBjb2xvcjogI2FmYzcwZDtcbn1cbi5lbmVyZ3ktbGFiZWxfX2Vlay1hMSB7XG4gIGNvbG9yOiAjNThhYjMyO1xufVxuLmVuZXJneS1sYWJlbF9fZWVrLWEyIHtcbiAgY29sb3I6ICMwMTkwMzk7XG59XG4uZW5lcmd5LWxhYmVsX19lZWstYiB7XG4gIGNvbG9yOiAjZmRlYTE0O1xufVxuLmVuZXJneS1sYWJlbF9fZWVrLWMge1xuICBjb2xvcjogI2ZkY2IwMDtcbn1cbi5lbmVyZ3ktbGFiZWxfX2Vlay1kIHtcbiAgY29sb3I6ICNmMTkzMDU7XG59XG4uZW5lcmd5LWxhYmVsX19lZWstZSB7XG4gIGNvbG9yOiAjZTAwNzFiO1xufVxuLmVuZXJneS1sYWJlbCAuaWNvbi0taXMtY2xpY2thYmxlIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmVuZXJneS1sYWJlbCAuaWNvbiB7XG4gIG1hcmdpbi1yaWdodDogMC41cmVtO1xufVxuLmVuZXJneS1sYWJlbCAuaWNvbjpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLXJpZ2h0OiAwO1xufVxuLmVuZXJneS1sYWJlbCAuZGF0YS1zaGVldC1saW5rIHtcbiAgcGFkZGluZy1sZWZ0OiAwLjY2NjY2NjY2NjdyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDAuNjY2NjY2NjY2N3JlbTtcbn1cbi5lbmVyZ3ktbGFiZWxfX21vZGFsLXdpbmRvdy0xIHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLmVuZXJneS1sYWJlbF9fbW9kYWwtd2luZG93LTEgLm1vZGFsLXdpbmRvd19fY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAzMy4zMzMzMzMzMzMzcmVtO1xufVxuLmVuZXJneS1sYWJlbF9fbW9kYWwtd2luZG93LTEgLm1vZGFsLXdpbmRvd19fY29udGVudCB7XG4gIC13ZWJraXQtYm94LXBhY2s6IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IG5vcm1hbDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IG5vcm1hbDtcbn1cbi5lbmVyZ3ktbGFiZWxfX21vZGFsLXdpbmRvdy0xIC5lbmVyZ3ktbGFiZWwtaW5mby10ZXh0IHtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5lbmVyZ3ktbGFiZWxfX21vZGFsLXdpbmRvdy0yIHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLmVuZXJneS1sYWJlbF9fbW9kYWwtd2luZG93LTIgLm1vZGFsLXdpbmRvd19fY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiA2Ni42NjY2NjY2NjY3cmVtO1xufVxuLmVuZXJneS1sYWJlbF9fbW9kYWwtd2luZG93LTIgLm1vZGFsLXdpbmRvd19fY29udGVudCB7XG4gIC13ZWJraXQtYm94LXBhY2s6IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IG5vcm1hbDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IG5vcm1hbDtcbn1cbi5lbmVyZ3ktbGFiZWxfX21vZGFsLXdpbmRvdy0yIC5lbmVyZ3ktbGFiZWwtaW5mby10ZXh0IHtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5lbmVyZ3ktbGFiZWxfX21vZGFsLXdpbmRvdy0zIHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLmVuZXJneS1sYWJlbF9fbW9kYWwtd2luZG93LTMgLm1vZGFsLXdpbmRvd19fY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAxMDByZW07XG59XG4uZW5lcmd5LWxhYmVsX19tb2RhbC13aW5kb3ctMyAubW9kYWwtd2luZG93X19jb250ZW50IHtcbiAgLXdlYmtpdC1ib3gtcGFjazogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtcGFjazogbm9ybWFsO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogbm9ybWFsO1xufVxuLmVuZXJneS1sYWJlbF9fbW9kYWwtd2luZG93LTMgLmVuZXJneS1sYWJlbC1pbmZvLXRleHQge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmVuZXJneS1sYWJlbF9fbW9kYWwtd2luZG93LTQge1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4uZW5lcmd5LWxhYmVsX19tb2RhbC13aW5kb3ctNCAubW9kYWwtd2luZG93X19jb250YWluZXIge1xuICBtYXgtd2lkdGg6IDEzMy4zMzMzMzMzMzMzcmVtO1xufVxuLmVuZXJneS1sYWJlbF9fbW9kYWwtd2luZG93LTQgLm1vZGFsLXdpbmRvd19fY29udGVudCB7XG4gIC13ZWJraXQtYm94LXBhY2s6IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IG5vcm1hbDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IG5vcm1hbDtcbn1cbi5lbmVyZ3ktbGFiZWxfX21vZGFsLXdpbmRvdy00IC5lbmVyZ3ktbGFiZWwtaW5mby10ZXh0IHtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmVuZXJneS1sYWJlbC1pbWFnZS1zbGlkZXIge1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xufVxuLmVuZXJneS1sYWJlbC1pbWFnZS1zbGlkZXJfX2ltYWdlIHtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uZW5lcmd5LWxhYmVsLWltYWdlLXNsaWRlciAua2Vlbi1zbGlkZXItY2Fyb3VzZWxfX2NvbnRhaW5lciB7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG59XG4uZW5lcmd5LWxhYmVsLWltYWdlLXNsaWRlcl9fc2xpZGUge1xuICBkaXNwbGF5OiBpbmhlcml0O1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmVuZXJneS1sYWJlbC1pbWFnZS1zbGlkZXJfX2NvbnRhaW5lci5rZWVuLXNsaWRlci1jYXJvdXNlbCB7XG4gICAgZGlzcGxheTogaW5pdGlhbDtcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uZmlsdGVyLWNhdGVnb3J5LWFjY29yZGlvbl9faWNvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDA7XG4gIHRvcDogNTAlO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIGZvbnQtc2l6ZTogMS4zMzMzMzMzMzMzcmVtO1xufVxuLmZpbHRlci1jYXRlZ29yeS1hY2NvcmRpb25fX2l0ZW0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbn1cbi5maWx0ZXItY2F0ZWdvcnktYWNjb3JkaW9uX19pdGVtLmFjdGl2ZSAuZmlsdGVyLWNhdGVnb3J5LWFjY29yZGlvbl9faWNvbiB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpIHJvdGF0ZSgxODBkZWcpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKSByb3RhdGUoMTgwZGVnKTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmdvb2dsZS1tYXAge1xuICBoZWlnaHQ6IDMwMHB4O1xufVxuLmdvb2dsZS1tYXBfX2tpdGNoZW5zaW5rIHtcbiAgaGVpZ2h0OiA4MDBweDtcbn1cbi5nb29nbGUtbWFwX19maW5kLWRlYWxlciB7XG4gIGhlaWdodDogODAwcHg7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5ncmFwaGljLXNjYWxlIHtcbiAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xufVxuLmdyYXBoaWMtc2NhbGVfX2NvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZy10b3A6IDFyZW07XG4gIHBhZGRpbmctYm90dG9tOiAxcmVtO1xuICBtYXJnaW4tbGVmdDogMnJlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmdyYXBoaWMtc2NhbGVfX2xpbmUtb24tcnVsZXItYmFzZSB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMDAwO1xuICBtYXJnaW46IDAgYXV0bztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDAuNXJlbTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMXMgZWFzZS1vdXQ7XG4gIHRyYW5zaXRpb246IGFsbCAxcyBlYXNlLW91dDtcbn1cbi5ncmFwaGljLXNjYWxlX19saW5lLW9uLXJ1bGVyLXNtYWxsLCAuZ3JhcGhpYy1zY2FsZV9fbGluZS1vbi1ydWxlci1iaWcge1xuICBib3JkZXItbGVmdDogMC4wNjY2NjY2NjY3cmVtIHNvbGlkICMwMDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDA7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDFzIGVhc2Utb3V0O1xuICB0cmFuc2l0aW9uOiBhbGwgMXMgZWFzZS1vdXQ7XG59XG4uZ3JhcGhpYy1zY2FsZV9fbGluZS1vbi1ydWxlci1zbWFsbCBsYWJlbCwgLmdyYXBoaWMtc2NhbGVfX2xpbmUtb24tcnVsZXItYmlnIGxhYmVsIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG4uZ3JhcGhpYy1zY2FsZV9fbGluZS1vbi1ydWxlci1iaWcge1xuICBoZWlnaHQ6IDAuNXJlbTtcbiAgYm90dG9tOiAwO1xufVxuLmdyYXBoaWMtc2NhbGVfX2xpbmUtb24tcnVsZXItc21hbGwge1xuICBib3R0b206IDAuMjVyZW07XG4gIGhlaWdodDogMC4yNXJlbTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmljb24tYnV0dG9uIHtcbiAgd2lkdGg6IDNyZW07XG4gIGhlaWdodDogM3JlbTtcbiAgbWFyZ2luOiAwIDAuNDMzMzMzMzMzM3JlbSAwIDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG4uaWNvbi1idXR0b24tLWhhcy1sYWJlbCB7XG4gIGhlaWdodDogMy4zMzMzMzMzMzMzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAuaWNvbi1idXR0b24tLWhhcy1sYWJlbCB7XG4gICAgaGVpZ2h0OiBpbmhlcml0O1xuICB9XG59XG4uaWNvbi1idXR0b24tLWhhcy1sYWJlbCAuaWNvbjo6YmVmb3JlIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4uaWNvbi1idXR0b24tLWhhcy1sYWJlbCAubGFiZWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJvdHRvbTogMDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDEuMTtcbn1cbi5pY29uLWJ1dHRvbi0tdGVjaG5pY2FsIHtcbiAgd2lkdGg6IGF1dG87XG4gIGhlaWdodDogYXV0bztcbn1cbi5pY29uLWJ1dHRvbi0tdGVjaG5pY2FsIC5pY29uIFtjbGFzc149cGF0aF0sXG4uaWNvbi1idXR0b24tLXRlY2huaWNhbCAuaWNvbiBbY2xhc3MqPXBhdGhdIHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLmljb24tYnV0dG9uLS10ZWNobmljYWwgLmljb24gW2NsYXNzXj1wYXRoXTo6YmVmb3JlLFxuLmljb24tYnV0dG9uLS10ZWNobmljYWwgLmljb24gW2NsYXNzKj1wYXRoXTo6YmVmb3JlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMDIzcHgpIHtcbiAgLmljb24tYnV0dG9uLS10ZWNobmljYWwgLmljb24gW2NsYXNzXj1wYXRoXTo6YmVmb3JlLFxuICAuaWNvbi1idXR0b24tLXRlY2huaWNhbCAuaWNvbiBbY2xhc3MqPXBhdGhdOjpiZWZvcmUge1xuICAgIG1hcmdpbi1sZWZ0OiAtMXJlbTtcbiAgfVxufVxuLmljb24tYnV0dG9uX19jb250YWluZXIge1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmljb24tYnV0dG9uX19pY29uLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDNyZW07XG4gIGhlaWdodDogM3JlbTtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uaWNvbi1idXR0b25fX2ljb24sIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbiB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAyNTBtcyBlYXNlLWluLW91dCwgYmFja2dyb3VuZC1jb2xvciAyNTBtcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQsIGJhY2tncm91bmQtY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbiAgd2lkdGg6IDNyZW07XG4gIGhlaWdodDogM3JlbTtcbiAgbWF4LWhlaWdodDogM3JlbTtcbiAgbGluZS1oZWlnaHQ6IDNyZW07XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctdGV4dCwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy10ZXh0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRiNGI0ZDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctdGV4dCBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctdGV4dCBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy13aGl0ZSwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy13aGl0ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLXdoaXRlIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy13aGl0ZSBzdmcge1xuICBmaWxsOiAjZmZmO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1tYWluLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLW1haW4ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVjYzAwO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1tYWluIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1tYWluIHN2ZyB7XG4gIGZpbGw6ICNmZWNjMDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWFsdCwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1hbHQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGI0YjRkO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1hbHQgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWFsdCBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1kYXJrLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWRhcmsge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWExNzFiO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1kYXJrIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1kYXJrIHN2ZyB7XG4gIGZpbGw6ICMxYTE3MWI7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWJsYWNrLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWJsYWNrIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctYmxhY2sgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWJsYWNrIHN2ZyB7XG4gIGZpbGw6ICMwMDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLXRyYW5zcGFyZW50LCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLXRyYW5zcGFyZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctdHJhbnNwYXJlbnQgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLXRyYW5zcGFyZW50IHN2ZyB7XG4gIGZpbGw6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLW92ZXJsYXksIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctb3ZlcmxheSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctb3ZlcmxheSBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctb3ZlcmxheSBzdmcge1xuICBmaWxsOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWNvbnRyb2xzLW92ZXJsYXksIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctY29udHJvbHMtb3ZlcmxheSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctY29udHJvbHMtb3ZlcmxheSBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctY29udHJvbHMtb3ZlcmxheSBzdmcge1xuICBmaWxsOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWdyYXktMSwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ncmF5LTEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ncmF5LTEgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWdyYXktMSBzdmcge1xuICBmaWxsOiAjZWNlY2VjO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ncmF5LTIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctZ3JheS0yIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QwZDBkMDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctZ3JheS0yIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ncmF5LTIgc3ZnIHtcbiAgZmlsbDogI2QwZDBkMDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctZ3JheS0zLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWdyYXktMyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNiMmIyYjI7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWdyYXktMyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctZ3JheS0zIHN2ZyB7XG4gIGZpbGw6ICNiMmIyYjI7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWdyYXktNCwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ncmF5LTQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTI5MjkyO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ncmF5LTQgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWdyYXktNCBzdmcge1xuICBmaWxsOiAjOTI5MjkyO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ncmF5LTUsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctZ3JheS01IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzZmNmY2Zjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctZ3JheS01IHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ncmF5LTUgc3ZnIHtcbiAgZmlsbDogIzZmNmY2Zjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctZ3JheS02LCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWdyYXktNiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0YjRiNGQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWdyYXktNiBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctZ3JheS02IHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWdyYXktNywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ncmF5LTcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWExNzFiO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ncmF5LTcgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWdyYXktNyBzdmcge1xuICBmaWxsOiAjMWExNzFiO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1yZWQtMSwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1yZWQtMSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlMzIyMTM7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLXJlZC0xIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1yZWQtMSBzdmcge1xuICBmaWxsOiAjZTMyMjEzO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1yZWQtMiwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1yZWQtMiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlMTMwNmM7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLXJlZC0yIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1yZWQtMiBzdmcge1xuICBmaWxsOiAjZTEzMDZjO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1yZWQtMywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1yZWQtMyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkZDFhMTY7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLXJlZC0zIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1yZWQtMyBzdmcge1xuICBmaWxsOiAjZGQxYTE2O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1mYWNlYm9vaywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1mYWNlYm9vayB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzYjU5OTg7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWZhY2Vib29rIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1mYWNlYm9vayBzdmcge1xuICBmaWxsOiAjM2I1OTk4O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy10d2l0dGVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLXR3aXR0ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA3N2I1O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy10d2l0dGVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy10d2l0dGVyIHN2ZyB7XG4gIGZpbGw6ICMwMDc3YjU7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWVlay1hLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWVlay1hIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FmYzcwZDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctZWVrLWEgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWVlay1hIHN2ZyB7XG4gIGZpbGw6ICNhZmM3MGQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWVlay1hMSwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1lZWstYTEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNThhYjMyO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1lZWstYTEgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWVlay1hMSBzdmcge1xuICBmaWxsOiAjNThhYjMyO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1lZWstYTIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctZWVrLWEyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAxOTAzOTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctZWVrLWEyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1lZWstYTIgc3ZnIHtcbiAgZmlsbDogIzAxOTAzOTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctZWVrLWIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctZWVrLWIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmRlYTE0O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1lZWstYiBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctZWVrLWIgc3ZnIHtcbiAgZmlsbDogI2ZkZWExNDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctZWVrLWMsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctZWVrLWMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmRjYjAwO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1lZWstYyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctZWVrLWMgc3ZnIHtcbiAgZmlsbDogI2ZkY2IwMDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctZWVrLWQsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctZWVrLWQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjE5MzA1O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1lZWstZCBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctZWVrLWQgc3ZnIHtcbiAgZmlsbDogI2YxOTMwNTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctZWVrLWUsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctZWVrLWUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTAwNzFiO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1lZWstZSBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctZWVrLWUgc3ZnIHtcbiAgZmlsbDogI2UwMDcxYjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS10ZXh0OmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktdGV4dDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0YjRiNGQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktdGV4dDpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItb25seS10ZXh0OmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktd2hpdGU6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItb25seS13aGl0ZTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktd2hpdGU6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktd2hpdGU6aG92ZXIgc3ZnIHtcbiAgZmlsbDogI2ZmZjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS1tYWluOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktbWFpbjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWNjMDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktbWFpbjpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItb25seS1tYWluOmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICNmZWNjMDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktYWx0OmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktYWx0OmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRiNGI0ZDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS1hbHQ6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktYWx0OmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktZGFyazpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1vbmx5LWRhcms6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWExNzFiO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1vbmx5LWRhcms6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktZGFyazpob3ZlciBzdmcge1xuICBmaWxsOiAjMWExNzFiO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1vbmx5LWJsYWNrOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktYmxhY2s6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1vbmx5LWJsYWNrOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1vbmx5LWJsYWNrOmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICMwMDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktdHJhbnNwYXJlbnQ6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItb25seS10cmFuc3BhcmVudDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktdHJhbnNwYXJlbnQ6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktdHJhbnNwYXJlbnQ6aG92ZXIgc3ZnIHtcbiAgZmlsbDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS1vdmVybGF5OmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktb3ZlcmxheTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS1vdmVybGF5OmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1vbmx5LW92ZXJsYXk6aG92ZXIgc3ZnIHtcbiAgZmlsbDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1vbmx5LWNvbnRyb2xzLW92ZXJsYXk6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItb25seS1jb250cm9scy1vdmVybGF5OmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1vbmx5LWNvbnRyb2xzLW92ZXJsYXk6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktY29udHJvbHMtb3ZlcmxheTpob3ZlciBzdmcge1xuICBmaWxsOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktZ3JheS0xOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktZ3JheS0xOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS1ncmF5LTE6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktZ3JheS0xOmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICNlY2VjZWM7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktZ3JheS0yOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktZ3JheS0yOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QwZDBkMDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS1ncmF5LTI6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktZ3JheS0yOmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICNkMGQwZDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktZ3JheS0zOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktZ3JheS0zOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2IyYjJiMjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS1ncmF5LTM6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktZ3JheS0zOmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICNiMmIyYjI7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktZ3JheS00OmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktZ3JheS00OmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzkyOTI5Mjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS1ncmF5LTQ6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktZ3JheS00OmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICM5MjkyOTI7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktZ3JheS01OmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktZ3JheS01OmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzZmNmY2Zjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS1ncmF5LTU6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktZ3JheS01OmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICM2ZjZmNmY7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktZ3JheS02OmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktZ3JheS02OmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRiNGI0ZDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS1ncmF5LTY6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktZ3JheS02OmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktZ3JheS03OmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktZ3JheS03OmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFhMTcxYjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS1ncmF5LTc6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktZ3JheS03OmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICMxYTE3MWI7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktcmVkLTE6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItb25seS1yZWQtMTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlMzIyMTM7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktcmVkLTE6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktcmVkLTE6aG92ZXIgc3ZnIHtcbiAgZmlsbDogI2UzMjIxMztcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS1yZWQtMjpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1vbmx5LXJlZC0yOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UxMzA2Yztcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS1yZWQtMjpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItb25seS1yZWQtMjpob3ZlciBzdmcge1xuICBmaWxsOiAjZTEzMDZjO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1vbmx5LXJlZC0zOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktcmVkLTM6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGQxYTE2O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1vbmx5LXJlZC0zOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1vbmx5LXJlZC0zOmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICNkZDFhMTY7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktZmFjZWJvb2s6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItb25seS1mYWNlYm9vazpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzYjU5OTg7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktZmFjZWJvb2s6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktZmFjZWJvb2s6aG92ZXIgc3ZnIHtcbiAgZmlsbDogIzNiNTk5ODtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS10d2l0dGVyOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktdHdpdHRlcjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDc3YjU7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktdHdpdHRlcjpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItb25seS10d2l0dGVyOmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICMwMDc3YjU7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktZWVrLWE6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItb25seS1lZWstYTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNhZmM3MGQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktZWVrLWE6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktZWVrLWE6aG92ZXIgc3ZnIHtcbiAgZmlsbDogI2FmYzcwZDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS1lZWstYTE6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItb25seS1lZWstYTE6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNThhYjMyO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1vbmx5LWVlay1hMTpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItb25seS1lZWstYTE6aG92ZXIgc3ZnIHtcbiAgZmlsbDogIzU4YWIzMjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS1lZWstYTI6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItb25seS1lZWstYTI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDE5MDM5O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1vbmx5LWVlay1hMjpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItb25seS1lZWstYTI6aG92ZXIgc3ZnIHtcbiAgZmlsbDogIzAxOTAzOTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS1lZWstYjpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1vbmx5LWVlay1iOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZkZWExNDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS1lZWstYjpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItb25seS1lZWstYjpob3ZlciBzdmcge1xuICBmaWxsOiAjZmRlYTE0O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1vbmx5LWVlay1jOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktZWVrLWM6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmRjYjAwO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1vbmx5LWVlay1jOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1vbmx5LWVlay1jOmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICNmZGNiMDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktZWVrLWQ6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItb25seS1lZWstZDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMTkzMDU7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW9ubHktZWVrLWQ6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW9ubHktZWVrLWQ6aG92ZXIgc3ZnIHtcbiAgZmlsbDogI2YxOTMwNTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS1lZWstZTpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1vbmx5LWVlay1lOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UwMDcxYjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb25seS1lZWstZTpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItb25seS1lZWstZTpob3ZlciBzdmcge1xuICBmaWxsOiAjZTAwNzFiO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci10ZXh0OmhvdmVyLCAuaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLXRleHQ6Zm9jdXMsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItdGV4dDpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci10ZXh0OmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRiNGI0ZDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItdGV4dDpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItdGV4dDpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItdGV4dDpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItdGV4dDpmb2N1cyBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci13aGl0ZTpob3ZlciwgLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci13aGl0ZTpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci13aGl0ZTpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci13aGl0ZTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLXdoaXRlOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci13aGl0ZTpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItd2hpdGU6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLXdoaXRlOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICNmZmY7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLW1haW46aG92ZXIsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItbWFpbjpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1tYWluOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW1haW46Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVjYzAwO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1tYWluOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1tYWluOmZvY3VzIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1tYWluOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1tYWluOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICNmZWNjMDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWFsdDpob3ZlciwgLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1hbHQ6Zm9jdXMsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItYWx0OmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWFsdDpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0YjRiNGQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWFsdDpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItYWx0OmZvY3VzIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1hbHQ6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWFsdDpmb2N1cyBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1kYXJrOmhvdmVyLCAuaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWRhcms6Zm9jdXMsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZGFyazpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1kYXJrOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFhMTcxYjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZGFyazpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZGFyazpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZGFyazpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZGFyazpmb2N1cyBzdmcge1xuICBmaWxsOiAjMWExNzFiO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1ibGFjazpob3ZlciwgLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1ibGFjazpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1ibGFjazpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1ibGFjazpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWJsYWNrOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1ibGFjazpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItYmxhY2s6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWJsYWNrOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICMwMDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLXRyYW5zcGFyZW50OmhvdmVyLCAuaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLXRyYW5zcGFyZW50OmZvY3VzLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLXRyYW5zcGFyZW50OmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLXRyYW5zcGFyZW50OmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItdHJhbnNwYXJlbnQ6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLXRyYW5zcGFyZW50OmZvY3VzIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci10cmFuc3BhcmVudDpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItdHJhbnNwYXJlbnQ6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb3ZlcmxheTpob3ZlciwgLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1vdmVybGF5OmZvY3VzLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLW92ZXJsYXk6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItb3ZlcmxheTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb3ZlcmxheTpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItb3ZlcmxheTpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItb3ZlcmxheTpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItb3ZlcmxheTpmb2N1cyBzdmcge1xuICBmaWxsOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWNvbnRyb2xzLW92ZXJsYXk6aG92ZXIsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItY29udHJvbHMtb3ZlcmxheTpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1jb250cm9scy1vdmVybGF5OmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWNvbnRyb2xzLW92ZXJsYXk6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWNvbnRyb2xzLW92ZXJsYXk6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWNvbnRyb2xzLW92ZXJsYXk6Zm9jdXMgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWNvbnRyb2xzLW92ZXJsYXk6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWNvbnRyb2xzLW92ZXJsYXk6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1ncmF5LTE6aG92ZXIsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZ3JheS0xOmZvY3VzLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWdyYXktMTpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1ncmF5LTE6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1ncmF5LTE6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWdyYXktMTpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZ3JheS0xOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1ncmF5LTE6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogI2VjZWNlYztcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZ3JheS0yOmhvdmVyLCAuaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWdyYXktMjpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1ncmF5LTI6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZ3JheS0yOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QwZDBkMDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZ3JheS0yOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1ncmF5LTI6Zm9jdXMgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWdyYXktMjpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZ3JheS0yOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICNkMGQwZDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWdyYXktMzpob3ZlciwgLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1ncmF5LTM6Zm9jdXMsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZ3JheS0zOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWdyYXktMzpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNiMmIyYjI7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWdyYXktMzpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZ3JheS0zOmZvY3VzIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1ncmF5LTM6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWdyYXktMzpmb2N1cyBzdmcge1xuICBmaWxsOiAjYjJiMmIyO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1ncmF5LTQ6aG92ZXIsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZ3JheS00OmZvY3VzLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWdyYXktNDpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1ncmF5LTQ6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTI5MjkyO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1ncmF5LTQ6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWdyYXktNDpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZ3JheS00OmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1ncmF5LTQ6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogIzkyOTI5Mjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZ3JheS01OmhvdmVyLCAuaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWdyYXktNTpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1ncmF5LTU6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZ3JheS01OmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzZmNmY2Zjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZ3JheS01OmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1ncmF5LTU6Zm9jdXMgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWdyYXktNTpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZ3JheS01OmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICM2ZjZmNmY7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWdyYXktNjpob3ZlciwgLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1ncmF5LTY6Zm9jdXMsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZ3JheS02OmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWdyYXktNjpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0YjRiNGQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWdyYXktNjpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZ3JheS02OmZvY3VzIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1ncmF5LTY6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWdyYXktNjpmb2N1cyBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1ncmF5LTc6aG92ZXIsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZ3JheS03OmZvY3VzLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWdyYXktNzpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1ncmF5LTc6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWExNzFiO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1ncmF5LTc6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWdyYXktNzpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZ3JheS03OmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1ncmF5LTc6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogIzFhMTcxYjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItcmVkLTE6aG92ZXIsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItcmVkLTE6Zm9jdXMsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItcmVkLTE6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItcmVkLTE6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTMyMjEzO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1yZWQtMTpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItcmVkLTE6Zm9jdXMgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLXJlZC0xOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1yZWQtMTpmb2N1cyBzdmcge1xuICBmaWxsOiAjZTMyMjEzO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1yZWQtMjpob3ZlciwgLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1yZWQtMjpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1yZWQtMjpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1yZWQtMjpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlMTMwNmM7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLXJlZC0yOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1yZWQtMjpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItcmVkLTI6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLXJlZC0yOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICNlMTMwNmM7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLXJlZC0zOmhvdmVyLCAuaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLXJlZC0zOmZvY3VzLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLXJlZC0zOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLXJlZC0zOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RkMWExNjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItcmVkLTM6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLXJlZC0zOmZvY3VzIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1yZWQtMzpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItcmVkLTM6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogI2RkMWExNjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZmFjZWJvb2s6aG92ZXIsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZmFjZWJvb2s6Zm9jdXMsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZmFjZWJvb2s6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZmFjZWJvb2s6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2I1OTk4O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1mYWNlYm9vazpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZmFjZWJvb2s6Zm9jdXMgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWZhY2Vib29rOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1mYWNlYm9vazpmb2N1cyBzdmcge1xuICBmaWxsOiAjM2I1OTk4O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci10d2l0dGVyOmhvdmVyLCAuaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLXR3aXR0ZXI6Zm9jdXMsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItdHdpdHRlcjpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci10d2l0dGVyOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNzdiNTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItdHdpdHRlcjpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItdHdpdHRlcjpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItdHdpdHRlcjpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItdHdpdHRlcjpmb2N1cyBzdmcge1xuICBmaWxsOiAjMDA3N2I1O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1lZWstYTpob3ZlciwgLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1lZWstYTpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1lZWstYTpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1lZWstYTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNhZmM3MGQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWVlay1hOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1lZWstYTpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZWVrLWE6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWVlay1hOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICNhZmM3MGQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWVlay1hMTpob3ZlciwgLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1lZWstYTE6Zm9jdXMsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZWVrLWExOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWVlay1hMTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1OGFiMzI7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWVlay1hMTpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZWVrLWExOmZvY3VzIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1lZWstYTE6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWVlay1hMTpmb2N1cyBzdmcge1xuICBmaWxsOiAjNThhYjMyO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1lZWstYTI6aG92ZXIsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZWVrLWEyOmZvY3VzLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWVlay1hMjpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1lZWstYTI6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDE5MDM5O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1lZWstYTI6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWVlay1hMjpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZWVrLWEyOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1lZWstYTI6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogIzAxOTAzOTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZWVrLWI6aG92ZXIsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZWVrLWI6Zm9jdXMsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZWVrLWI6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZWVrLWI6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmRlYTE0O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1lZWstYjpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZWVrLWI6Zm9jdXMgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWVlay1iOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1lZWstYjpmb2N1cyBzdmcge1xuICBmaWxsOiAjZmRlYTE0O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1lZWstYzpob3ZlciwgLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1lZWstYzpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1lZWstYzpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1lZWstYzpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZGNiMDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWVlay1jOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1lZWstYzpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZWVrLWM6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWVlay1jOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICNmZGNiMDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWVlay1kOmhvdmVyLCAuaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWVlay1kOmZvY3VzLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWVlay1kOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWVlay1kOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YxOTMwNTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZWVrLWQ6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2ljb24tLWJnLWhvdmVyLWVlay1kOmZvY3VzIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1lZWstZDpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZWVrLWQ6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogI2YxOTMwNTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZWVrLWU6aG92ZXIsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZWVrLWU6Zm9jdXMsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZWVrLWU6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctaG92ZXItZWVrLWU6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTAwNzFiO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1lZWstZTpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItZWVrLWU6Zm9jdXMgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWJnLWhvdmVyLWVlay1lOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1ob3Zlci1lZWstZTpmb2N1cyBzdmcge1xuICBmaWxsOiAjZTAwNzFiO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci10ZXh0LCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLXRleHQge1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItdGV4dCBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItdGV4dCBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci13aGl0ZSwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci13aGl0ZSB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci13aGl0ZSBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3Itd2hpdGUgc3ZnIHtcbiAgZmlsbDogI2ZmZjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItbWFpbiwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1tYWluIHtcbiAgY29sb3I6ICNmZWNjMDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLW1haW4gc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLW1haW4gc3ZnIHtcbiAgZmlsbDogI2ZlY2MwMDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItYWx0LCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWFsdCB7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1hbHQgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWFsdCBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1kYXJrLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWRhcmsge1xuICBjb2xvcjogIzFhMTcxYjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItZGFyayBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItZGFyayBzdmcge1xuICBmaWxsOiAjMWExNzFiO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ibGFjaywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ibGFjayB7XG4gIGNvbG9yOiAjMDAwO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ibGFjayBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItYmxhY2sgc3ZnIHtcbiAgZmlsbDogIzAwMDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItdHJhbnNwYXJlbnQsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItdHJhbnNwYXJlbnQge1xuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItdHJhbnNwYXJlbnQgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLXRyYW5zcGFyZW50IHN2ZyB7XG4gIGZpbGw6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLW92ZXJsYXksIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3Itb3ZlcmxheSB7XG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLW92ZXJsYXkgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLW92ZXJsYXkgc3ZnIHtcbiAgZmlsbDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1jb250cm9scy1vdmVybGF5LCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWNvbnRyb2xzLW92ZXJsYXkge1xuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1jb250cm9scy1vdmVybGF5IHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1jb250cm9scy1vdmVybGF5IHN2ZyB7XG4gIGZpbGw6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItZ3JheS0xLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWdyYXktMSB7XG4gIGNvbG9yOiAjZWNlY2VjO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ncmF5LTEgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWdyYXktMSBzdmcge1xuICBmaWxsOiAjZWNlY2VjO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ncmF5LTIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItZ3JheS0yIHtcbiAgY29sb3I6ICNkMGQwZDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWdyYXktMiBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItZ3JheS0yIHN2ZyB7XG4gIGZpbGw6ICNkMGQwZDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWdyYXktMywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ncmF5LTMge1xuICBjb2xvcjogI2IyYjJiMjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItZ3JheS0zIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ncmF5LTMgc3ZnIHtcbiAgZmlsbDogI2IyYjJiMjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItZ3JheS00LCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWdyYXktNCB7XG4gIGNvbG9yOiAjOTI5MjkyO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ncmF5LTQgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWdyYXktNCBzdmcge1xuICBmaWxsOiAjOTI5MjkyO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ncmF5LTUsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItZ3JheS01IHtcbiAgY29sb3I6ICM2ZjZmNmY7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWdyYXktNSBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItZ3JheS01IHN2ZyB7XG4gIGZpbGw6ICM2ZjZmNmY7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWdyYXktNiwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ncmF5LTYge1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItZ3JheS02IHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ncmF5LTYgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItZ3JheS03LCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWdyYXktNyB7XG4gIGNvbG9yOiAjMWExNzFiO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ncmF5LTcgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWdyYXktNyBzdmcge1xuICBmaWxsOiAjMWExNzFiO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1yZWQtMSwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1yZWQtMSB7XG4gIGNvbG9yOiAjZTMyMjEzO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1yZWQtMSBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItcmVkLTEgc3ZnIHtcbiAgZmlsbDogI2UzMjIxMztcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItcmVkLTIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItcmVkLTIge1xuICBjb2xvcjogI2UxMzA2Yztcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItcmVkLTIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLXJlZC0yIHN2ZyB7XG4gIGZpbGw6ICNlMTMwNmM7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLXJlZC0zLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLXJlZC0zIHtcbiAgY29sb3I6ICNkZDFhMTY7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLXJlZC0zIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1yZWQtMyBzdmcge1xuICBmaWxsOiAjZGQxYTE2O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1mYWNlYm9vaywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1mYWNlYm9vayB7XG4gIGNvbG9yOiAjM2I1OTk4O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1mYWNlYm9vayBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItZmFjZWJvb2sgc3ZnIHtcbiAgZmlsbDogIzNiNTk5ODtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItdHdpdHRlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci10d2l0dGVyIHtcbiAgY29sb3I6ICMwMDc3YjU7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLXR3aXR0ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLXR3aXR0ZXIgc3ZnIHtcbiAgZmlsbDogIzAwNzdiNTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItZWVrLWEsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItZWVrLWEge1xuICBjb2xvcjogI2FmYzcwZDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItZWVrLWEgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWVlay1hIHN2ZyB7XG4gIGZpbGw6ICNhZmM3MGQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWVlay1hMSwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1lZWstYTEge1xuICBjb2xvcjogIzU4YWIzMjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItZWVrLWExIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1lZWstYTEgc3ZnIHtcbiAgZmlsbDogIzU4YWIzMjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItZWVrLWEyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWVlay1hMiB7XG4gIGNvbG9yOiAjMDE5MDM5O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1lZWstYTIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWVlay1hMiBzdmcge1xuICBmaWxsOiAjMDE5MDM5O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1lZWstYiwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1lZWstYiB7XG4gIGNvbG9yOiAjZmRlYTE0O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1lZWstYiBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItZWVrLWIgc3ZnIHtcbiAgZmlsbDogI2ZkZWExNDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItZWVrLWMsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItZWVrLWMge1xuICBjb2xvcjogI2ZkY2IwMDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItZWVrLWMgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWVlay1jIHN2ZyB7XG4gIGZpbGw6ICNmZGNiMDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWVlay1kLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWVlay1kIHtcbiAgY29sb3I6ICNmMTkzMDU7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWVlay1kIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1lZWstZCBzdmcge1xuICBmaWxsOiAjZjE5MzA1O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1lZWstZSwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1lZWstZSB7XG4gIGNvbG9yOiAjZTAwNzFiO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1lZWstZSBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItZWVrLWUgc3ZnIHtcbiAgZmlsbDogI2UwMDcxYjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItb25seS10ZXh0OmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW9ubHktdGV4dDpob3ZlciB7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vbmx5LXRleHQ6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW9ubHktdGV4dDpob3ZlciBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vbmx5LXdoaXRlOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW9ubHktd2hpdGU6aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItb25seS13aGl0ZTpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb25seS13aGl0ZTpob3ZlciBzdmcge1xuICBmaWxsOiAjZmZmO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vbmx5LW1haW46aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb25seS1tYWluOmhvdmVyIHtcbiAgY29sb3I6ICNmZWNjMDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktbWFpbjpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb25seS1tYWluOmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICNmZWNjMDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktYWx0OmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW9ubHktYWx0OmhvdmVyIHtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktYWx0OmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1vbmx5LWFsdDpob3ZlciBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vbmx5LWRhcms6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb25seS1kYXJrOmhvdmVyIHtcbiAgY29sb3I6ICMxYTE3MWI7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktZGFyazpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb25seS1kYXJrOmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICMxYTE3MWI7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktYmxhY2s6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb25seS1ibGFjazpob3ZlciB7XG4gIGNvbG9yOiAjMDAwO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vbmx5LWJsYWNrOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1vbmx5LWJsYWNrOmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICMwMDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktdHJhbnNwYXJlbnQ6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb25seS10cmFuc3BhcmVudDpob3ZlciB7XG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vbmx5LXRyYW5zcGFyZW50OmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1vbmx5LXRyYW5zcGFyZW50OmhvdmVyIHN2ZyB7XG4gIGZpbGw6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktb3ZlcmxheTpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1vbmx5LW92ZXJsYXk6aG92ZXIge1xuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vbmx5LW92ZXJsYXk6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW9ubHktb3ZlcmxheTpob3ZlciBzdmcge1xuICBmaWxsOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktY29udHJvbHMtb3ZlcmxheTpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1vbmx5LWNvbnRyb2xzLW92ZXJsYXk6aG92ZXIge1xuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vbmx5LWNvbnRyb2xzLW92ZXJsYXk6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW9ubHktY29udHJvbHMtb3ZlcmxheTpob3ZlciBzdmcge1xuICBmaWxsOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktZ3JheS0xOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW9ubHktZ3JheS0xOmhvdmVyIHtcbiAgY29sb3I6ICNlY2VjZWM7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktZ3JheS0xOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1vbmx5LWdyYXktMTpob3ZlciBzdmcge1xuICBmaWxsOiAjZWNlY2VjO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vbmx5LWdyYXktMjpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1vbmx5LWdyYXktMjpob3ZlciB7XG4gIGNvbG9yOiAjZDBkMGQwO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vbmx5LWdyYXktMjpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb25seS1ncmF5LTI6aG92ZXIgc3ZnIHtcbiAgZmlsbDogI2QwZDBkMDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItb25seS1ncmF5LTM6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb25seS1ncmF5LTM6aG92ZXIge1xuICBjb2xvcjogI2IyYjJiMjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItb25seS1ncmF5LTM6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW9ubHktZ3JheS0zOmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICNiMmIyYjI7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktZ3JheS00OmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW9ubHktZ3JheS00OmhvdmVyIHtcbiAgY29sb3I6ICM5MjkyOTI7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktZ3JheS00OmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1vbmx5LWdyYXktNDpob3ZlciBzdmcge1xuICBmaWxsOiAjOTI5MjkyO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vbmx5LWdyYXktNTpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1vbmx5LWdyYXktNTpob3ZlciB7XG4gIGNvbG9yOiAjNmY2ZjZmO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vbmx5LWdyYXktNTpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb25seS1ncmF5LTU6aG92ZXIgc3ZnIHtcbiAgZmlsbDogIzZmNmY2Zjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItb25seS1ncmF5LTY6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb25seS1ncmF5LTY6aG92ZXIge1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItb25seS1ncmF5LTY6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW9ubHktZ3JheS02OmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktZ3JheS03OmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW9ubHktZ3JheS03OmhvdmVyIHtcbiAgY29sb3I6ICMxYTE3MWI7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktZ3JheS03OmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1vbmx5LWdyYXktNzpob3ZlciBzdmcge1xuICBmaWxsOiAjMWExNzFiO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vbmx5LXJlZC0xOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW9ubHktcmVkLTE6aG92ZXIge1xuICBjb2xvcjogI2UzMjIxMztcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItb25seS1yZWQtMTpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb25seS1yZWQtMTpob3ZlciBzdmcge1xuICBmaWxsOiAjZTMyMjEzO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vbmx5LXJlZC0yOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW9ubHktcmVkLTI6aG92ZXIge1xuICBjb2xvcjogI2UxMzA2Yztcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItb25seS1yZWQtMjpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb25seS1yZWQtMjpob3ZlciBzdmcge1xuICBmaWxsOiAjZTEzMDZjO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vbmx5LXJlZC0zOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW9ubHktcmVkLTM6aG92ZXIge1xuICBjb2xvcjogI2RkMWExNjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItb25seS1yZWQtMzpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb25seS1yZWQtMzpob3ZlciBzdmcge1xuICBmaWxsOiAjZGQxYTE2O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vbmx5LWZhY2Vib29rOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW9ubHktZmFjZWJvb2s6aG92ZXIge1xuICBjb2xvcjogIzNiNTk5ODtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItb25seS1mYWNlYm9vazpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb25seS1mYWNlYm9vazpob3ZlciBzdmcge1xuICBmaWxsOiAjM2I1OTk4O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vbmx5LXR3aXR0ZXI6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb25seS10d2l0dGVyOmhvdmVyIHtcbiAgY29sb3I6ICMwMDc3YjU7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktdHdpdHRlcjpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb25seS10d2l0dGVyOmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICMwMDc3YjU7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktZWVrLWE6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb25seS1lZWstYTpob3ZlciB7XG4gIGNvbG9yOiAjYWZjNzBkO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vbmx5LWVlay1hOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1vbmx5LWVlay1hOmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICNhZmM3MGQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktZWVrLWExOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW9ubHktZWVrLWExOmhvdmVyIHtcbiAgY29sb3I6ICM1OGFiMzI7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktZWVrLWExOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1vbmx5LWVlay1hMTpob3ZlciBzdmcge1xuICBmaWxsOiAjNThhYjMyO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vbmx5LWVlay1hMjpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1vbmx5LWVlay1hMjpob3ZlciB7XG4gIGNvbG9yOiAjMDE5MDM5O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vbmx5LWVlay1hMjpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb25seS1lZWstYTI6aG92ZXIgc3ZnIHtcbiAgZmlsbDogIzAxOTAzOTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItb25seS1lZWstYjpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1vbmx5LWVlay1iOmhvdmVyIHtcbiAgY29sb3I6ICNmZGVhMTQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktZWVrLWI6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW9ubHktZWVrLWI6aG92ZXIgc3ZnIHtcbiAgZmlsbDogI2ZkZWExNDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItb25seS1lZWstYzpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1vbmx5LWVlay1jOmhvdmVyIHtcbiAgY29sb3I6ICNmZGNiMDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktZWVrLWM6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW9ubHktZWVrLWM6aG92ZXIgc3ZnIHtcbiAgZmlsbDogI2ZkY2IwMDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItb25seS1lZWstZDpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1vbmx5LWVlay1kOmhvdmVyIHtcbiAgY29sb3I6ICNmMTkzMDU7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktZWVrLWQ6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW9ubHktZWVrLWQ6aG92ZXIgc3ZnIHtcbiAgZmlsbDogI2YxOTMwNTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItb25seS1lZWstZTpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1vbmx5LWVlay1lOmhvdmVyIHtcbiAgY29sb3I6ICNlMDA3MWI7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW9ubHktZWVrLWU6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW9ubHktZWVrLWU6aG92ZXIgc3ZnIHtcbiAgZmlsbDogI2UwMDcxYjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItdGV4dDpob3ZlciwgLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci10ZXh0OmZvY3VzLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLXRleHQ6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItdGV4dDpmb2N1cyB7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci10ZXh0OmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci10ZXh0OmZvY3VzIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci10ZXh0OmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci10ZXh0OmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLXdoaXRlOmhvdmVyLCAuaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLXdoaXRlOmZvY3VzLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLXdoaXRlOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLXdoaXRlOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLXdoaXRlOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci13aGl0ZTpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItd2hpdGU6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLXdoaXRlOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICNmZmY7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW1haW46aG92ZXIsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItbWFpbjpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1tYWluOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLW1haW46Zm9jdXMge1xuICBjb2xvcjogI2ZlY2MwMDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItbWFpbjpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItbWFpbjpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItbWFpbjpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItbWFpbjpmb2N1cyBzdmcge1xuICBmaWxsOiAjZmVjYzAwO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1hbHQ6aG92ZXIsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItYWx0OmZvY3VzLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWFsdDpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1hbHQ6Zm9jdXMge1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItYWx0OmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1hbHQ6Zm9jdXMgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWFsdDpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItYWx0OmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWRhcms6aG92ZXIsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZGFyazpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1kYXJrOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWRhcms6Zm9jdXMge1xuICBjb2xvcjogIzFhMTcxYjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZGFyazpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZGFyazpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItZGFyazpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItZGFyazpmb2N1cyBzdmcge1xuICBmaWxsOiAjMWExNzFiO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1ibGFjazpob3ZlciwgLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1ibGFjazpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1ibGFjazpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1ibGFjazpmb2N1cyB7XG4gIGNvbG9yOiAjMDAwO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1ibGFjazpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItYmxhY2s6Zm9jdXMgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWJsYWNrOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1ibGFjazpmb2N1cyBzdmcge1xuICBmaWxsOiAjMDAwO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci10cmFuc3BhcmVudDpob3ZlciwgLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci10cmFuc3BhcmVudDpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci10cmFuc3BhcmVudDpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci10cmFuc3BhcmVudDpmb2N1cyB7XG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci10cmFuc3BhcmVudDpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItdHJhbnNwYXJlbnQ6Zm9jdXMgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLXRyYW5zcGFyZW50OmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci10cmFuc3BhcmVudDpmb2N1cyBzdmcge1xuICBmaWxsOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1vdmVybGF5OmhvdmVyLCAuaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLW92ZXJsYXk6Zm9jdXMsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb3ZlcmxheTpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1vdmVybGF5OmZvY3VzIHtcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItb3ZlcmxheTpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItb3ZlcmxheTpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb3ZlcmxheTpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItb3ZlcmxheTpmb2N1cyBzdmcge1xuICBmaWxsOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWNvbnRyb2xzLW92ZXJsYXk6aG92ZXIsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItY29udHJvbHMtb3ZlcmxheTpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1jb250cm9scy1vdmVybGF5OmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWNvbnRyb2xzLW92ZXJsYXk6Zm9jdXMge1xuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1jb250cm9scy1vdmVybGF5OmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1jb250cm9scy1vdmVybGF5OmZvY3VzIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1jb250cm9scy1vdmVybGF5OmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1jb250cm9scy1vdmVybGF5OmZvY3VzIHN2ZyB7XG4gIGZpbGw6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZ3JheS0xOmhvdmVyLCAuaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWdyYXktMTpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1ncmF5LTE6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItZ3JheS0xOmZvY3VzIHtcbiAgY29sb3I6ICNlY2VjZWM7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWdyYXktMTpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZ3JheS0xOmZvY3VzIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1ncmF5LTE6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWdyYXktMTpmb2N1cyBzdmcge1xuICBmaWxsOiAjZWNlY2VjO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1ncmF5LTI6aG92ZXIsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZ3JheS0yOmZvY3VzLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWdyYXktMjpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1ncmF5LTI6Zm9jdXMge1xuICBjb2xvcjogI2QwZDBkMDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZ3JheS0yOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1ncmF5LTI6Zm9jdXMgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWdyYXktMjpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItZ3JheS0yOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICNkMGQwZDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWdyYXktMzpob3ZlciwgLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1ncmF5LTM6Zm9jdXMsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItZ3JheS0zOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWdyYXktMzpmb2N1cyB7XG4gIGNvbG9yOiAjYjJiMmIyO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1ncmF5LTM6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWdyYXktMzpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItZ3JheS0zOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1ncmF5LTM6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogI2IyYjJiMjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZ3JheS00OmhvdmVyLCAuaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWdyYXktNDpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1ncmF5LTQ6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItZ3JheS00OmZvY3VzIHtcbiAgY29sb3I6ICM5MjkyOTI7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWdyYXktNDpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZ3JheS00OmZvY3VzIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1ncmF5LTQ6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWdyYXktNDpmb2N1cyBzdmcge1xuICBmaWxsOiAjOTI5MjkyO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1ncmF5LTU6aG92ZXIsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZ3JheS01OmZvY3VzLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWdyYXktNTpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1ncmF5LTU6Zm9jdXMge1xuICBjb2xvcjogIzZmNmY2Zjtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZ3JheS01OmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1ncmF5LTU6Zm9jdXMgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWdyYXktNTpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItZ3JheS01OmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICM2ZjZmNmY7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWdyYXktNjpob3ZlciwgLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1ncmF5LTY6Zm9jdXMsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItZ3JheS02OmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWdyYXktNjpmb2N1cyB7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1ncmF5LTY6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWdyYXktNjpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItZ3JheS02OmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1ncmF5LTY6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZ3JheS03OmhvdmVyLCAuaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWdyYXktNzpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1ncmF5LTc6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItZ3JheS03OmZvY3VzIHtcbiAgY29sb3I6ICMxYTE3MWI7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWdyYXktNzpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZ3JheS03OmZvY3VzIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1ncmF5LTc6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWdyYXktNzpmb2N1cyBzdmcge1xuICBmaWxsOiAjMWExNzFiO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1yZWQtMTpob3ZlciwgLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1yZWQtMTpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1yZWQtMTpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1yZWQtMTpmb2N1cyB7XG4gIGNvbG9yOiAjZTMyMjEzO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1yZWQtMTpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItcmVkLTE6Zm9jdXMgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLXJlZC0xOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1yZWQtMTpmb2N1cyBzdmcge1xuICBmaWxsOiAjZTMyMjEzO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1yZWQtMjpob3ZlciwgLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1yZWQtMjpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1yZWQtMjpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1yZWQtMjpmb2N1cyB7XG4gIGNvbG9yOiAjZTEzMDZjO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1yZWQtMjpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItcmVkLTI6Zm9jdXMgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLXJlZC0yOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1yZWQtMjpmb2N1cyBzdmcge1xuICBmaWxsOiAjZTEzMDZjO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1yZWQtMzpob3ZlciwgLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1yZWQtMzpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1yZWQtMzpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1yZWQtMzpmb2N1cyB7XG4gIGNvbG9yOiAjZGQxYTE2O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1yZWQtMzpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItcmVkLTM6Zm9jdXMgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLXJlZC0zOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1yZWQtMzpmb2N1cyBzdmcge1xuICBmaWxsOiAjZGQxYTE2O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1mYWNlYm9vazpob3ZlciwgLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1mYWNlYm9vazpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1mYWNlYm9vazpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1mYWNlYm9vazpmb2N1cyB7XG4gIGNvbG9yOiAjM2I1OTk4O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1mYWNlYm9vazpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZmFjZWJvb2s6Zm9jdXMgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWZhY2Vib29rOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1mYWNlYm9vazpmb2N1cyBzdmcge1xuICBmaWxsOiAjM2I1OTk4O1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci10d2l0dGVyOmhvdmVyLCAuaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLXR3aXR0ZXI6Zm9jdXMsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItdHdpdHRlcjpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci10d2l0dGVyOmZvY3VzIHtcbiAgY29sb3I6ICMwMDc3YjU7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLXR3aXR0ZXI6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLXR3aXR0ZXI6Zm9jdXMgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLXR3aXR0ZXI6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLXR3aXR0ZXI6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogIzAwNzdiNTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZWVrLWE6aG92ZXIsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZWVrLWE6Zm9jdXMsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItZWVrLWE6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItZWVrLWE6Zm9jdXMge1xuICBjb2xvcjogI2FmYzcwZDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZWVrLWE6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWVlay1hOmZvY3VzIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1lZWstYTpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItZWVrLWE6Zm9jdXMgc3ZnIHtcbiAgZmlsbDogI2FmYzcwZDtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZWVrLWExOmhvdmVyLCAuaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWVlay1hMTpmb2N1cywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1lZWstYTE6aG92ZXIsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItZWVrLWExOmZvY3VzIHtcbiAgY29sb3I6ICM1OGFiMzI7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWVlay1hMTpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZWVrLWExOmZvY3VzIHN2ZywgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1lZWstYTE6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWVlay1hMTpmb2N1cyBzdmcge1xuICBmaWxsOiAjNThhYjMyO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1lZWstYTI6aG92ZXIsIC5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZWVrLWEyOmZvY3VzLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWVlay1hMjpob3ZlciwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1jb2xvci1ob3Zlci1lZWstYTI6Zm9jdXMge1xuICBjb2xvcjogIzAxOTAzOTtcbn1cbi5pY29uLWJ1dHRvbl9faWNvbi0tY29sb3ItaG92ZXItZWVrLWEyOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1lZWstYTI6Zm9jdXMgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWVlay1hMjpob3ZlciBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItZWVrLWEyOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICMwMTkwMzk7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWVlay1iOmhvdmVyLCAuaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWVlay1iOmZvY3VzLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWVlay1iOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWVlay1iOmZvY3VzIHtcbiAgY29sb3I6ICNmZGVhMTQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWVlay1iOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1lZWstYjpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItZWVrLWI6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWVlay1iOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICNmZGVhMTQ7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWVlay1jOmhvdmVyLCAuaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWVlay1jOmZvY3VzLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWVlay1jOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWVlay1jOmZvY3VzIHtcbiAgY29sb3I6ICNmZGNiMDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWVlay1jOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1lZWstYzpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItZWVrLWM6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWVlay1jOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICNmZGNiMDA7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWVlay1kOmhvdmVyLCAuaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWVlay1kOmZvY3VzLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWVlay1kOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWVlay1kOmZvY3VzIHtcbiAgY29sb3I6ICNmMTkzMDU7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWVlay1kOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1lZWstZDpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItZWVrLWQ6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWVlay1kOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICNmMTkzMDU7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWVlay1lOmhvdmVyLCAuaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWVlay1lOmZvY3VzLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWVlay1lOmhvdmVyLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWVlay1lOmZvY3VzIHtcbiAgY29sb3I6ICNlMDA3MWI7XG59XG4uaWNvbi1idXR0b25fX2ljb24tLWNvbG9yLWhvdmVyLWVlay1lOmhvdmVyIHN2ZywgLmljb24tYnV0dG9uX19pY29uLS1jb2xvci1ob3Zlci1lZWstZTpmb2N1cyBzdmcsIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tY29sb3ItaG92ZXItZWVrLWU6aG92ZXIgc3ZnLCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24tLWNvbG9yLWhvdmVyLWVlay1lOmZvY3VzIHN2ZyB7XG4gIGZpbGw6ICNlMDA3MWI7XG59XG4uaWNvbi1idXR0b25fX2ljb246OmJlZm9yZSwgLmljb24tYnV0dG9uX19ob3Zlci1pY29uOjpiZWZvcmUge1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4uaWNvbi1idXR0b25fX2hvdmVyLWljb24ge1xuICBvcGFjaXR5OiAwO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1zbHZ0ZWMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDFhM2VjO1xufVxuLmljb24tYnV0dG9uX19pY29uLS1zbHZ0ZWM6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDFhM2VjO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4uaWNvbi1idXR0b25fX2ljb24tLXNsdnRlYzpob3ZlciBzdmcge1xuICBmaWxsOiAjZmZmO1xufVxuLmljb24tYnV0dG9uOmhvdmVyIC5pY29uLWJ1dHRvbl9faWNvbi0td2l0aC1ob3Zlci1pY29uLCAuaWNvbi1idXR0b246Zm9jdXMgLmljb24tYnV0dG9uX19pY29uLS13aXRoLWhvdmVyLWljb24ge1xuICBvcGFjaXR5OiAwO1xufVxuLmljb24tYnV0dG9uOmhvdmVyIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbiwgLmljb24tYnV0dG9uOmZvY3VzIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbiB7XG4gIG9wYWNpdHk6IDE7XG59XG4uaWNvbi1idXR0b24tLWNvbG9yLWdyYXkge1xuICBjb2xvcjogIzZmNmY2Zjtcbn1cbi5pY29uLWJ1dHRvbltkaXNhYmxlZF0gLmljb24tYnV0dG9uX19pY29uLFxuLmljb24tYnV0dG9uW2Rpc2FibGVkXSAuaWNvbi1idXR0b25fX2hvdmVyLWljb24sIC5pY29uLWJ1dHRvbi0tZGlzYWJsZWQgLmljb24tYnV0dG9uX19pY29uLFxuLmljb24tYnV0dG9uLS1kaXNhYmxlZCAuaWNvbi1idXR0b25fX2hvdmVyLWljb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDBkMGQwO1xuICBib3JkZXItY29sb3I6ICNkMGQwZDA7XG4gIGNvbG9yOiAjZmZmO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuLmljb24tYnV0dG9uW2Rpc2FibGVkXSAuaWNvbi1idXR0b25fX2ljb246aG92ZXIsIC5pY29uLWJ1dHRvbltkaXNhYmxlZF0gLmljb24tYnV0dG9uX19pY29uOmZvY3VzLFxuLmljb24tYnV0dG9uW2Rpc2FibGVkXSAuaWNvbi1idXR0b25fX2hvdmVyLWljb246aG92ZXIsXG4uaWNvbi1idXR0b25bZGlzYWJsZWRdIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbjpmb2N1cywgLmljb24tYnV0dG9uLS1kaXNhYmxlZCAuaWNvbi1idXR0b25fX2ljb246aG92ZXIsIC5pY29uLWJ1dHRvbi0tZGlzYWJsZWQgLmljb24tYnV0dG9uX19pY29uOmZvY3VzLFxuLmljb24tYnV0dG9uLS1kaXNhYmxlZCAuaWNvbi1idXR0b25fX2hvdmVyLWljb246aG92ZXIsXG4uaWNvbi1idXR0b24tLWRpc2FibGVkIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbjpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkMGQwZDA7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmljb24tbWVzc2FnZV9fbGFiZWwtY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIC13ZWJraXQtYm94LXBhY2s6IHN0YXJ0O1xuICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuLmljb24tbWVzc2FnZV9faWNvbi1sZWZ0LWNvbnRhaW5lciB7XG4gIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWNjMDA7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi1yaWdodDogMC41cmVtO1xuICBsaW5lLWhlaWdodDogMTtcbiAgbWluLXdpZHRoOiAycmVtO1xuICBoZWlnaHQ6IDJyZW07XG59XG4uaWNvbi1tZXNzYWdlX19pY29uLWxlZnQtY29udGFpbmVyIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4uaWNvbi1tZXNzYWdlX19pY29uLWxlZnQgc3ZnIHtcbiAgd2lkdGg6IDEuMzMzMzMzMzMzM3JlbTtcbiAgaGVpZ2h0OiAxLjMzMzMzMzMzMzNyZW07XG4gIGZpbGw6ICNmZmY7XG59XG4uaWNvbi1tZXNzYWdlLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAuaWNvbi1tZXNzYWdlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLmljb24tbWVzc2FnZS0tcHJvZHVjdC1jb25maWd1cmF0b3IgLmljb24tbWVzc2FnZV9fbGFiZWwtY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLmljb24tbWVzc2FnZS0tbG9naW4tcGFnZSAuaWNvbi1tZXNzYWdlX19pY29uLWxlZnQ6OmJlZm9yZSB7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBmb250LXNpemU6IDIuNjY2NjY2NjY2N3JlbTtcbn1cbi5pY29uLW1lc3NhZ2UtLWxvZ2luLXBhZ2UgLmljb24tbWVzc2FnZV9fbGFiZWwge1xuICBtYXJnaW4tbGVmdDogMXJlbTtcbn1cbi5pY29uLW1lc3NhZ2UtLWNlbnRlciAuaWNvbi1tZXNzYWdlX19sYWJlbC1jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gIC5pY29uLW1lc3NhZ2UtLWNlbnRlci1sZy14bCAuaWNvbi1tZXNzYWdlX19sYWJlbC1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cbn1cbi5pY29uLW1lc3NhZ2UtLWVycm9yIHtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjI7XG59XG4uaWNvbi1tZXNzYWdlLS1lcnJvciAuaWNvbi1tZXNzYWdlX19sYWJlbCB7XG4gIGNvbG9yOiAjZGQxYTE2O1xufVxuLmljb24tbWVzc2FnZS0tZXJyb3IgLmljb24tbWVzc2FnZV9faWNvbi1sZWZ0LWNvbnRhaW5lciB7XG4gIGJhY2tncm91bmQ6ICNkZDFhMTY7XG59XG4uaWNvbi1tZXNzYWdlLS1mb250LXNtYWxsIHtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG4uaWNvbi1tZXNzYWdlLS1pY29uLXNtYWxsIHN2ZyB7XG4gIHdpZHRoOiAxLjJyZW07XG4gIGhlaWdodDogMS4ycmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmljb24tbWVzc2FnZS0taWNvbi1zbWFsbCAuaWNvbi1tZXNzYWdlX19pY29uLWxlZnQtY29udGFpbmVyIHtcbiAgICBtaW4td2lkdGg6IHVuc2V0O1xuICB9XG59XG4uaWNvbi1tZXNzYWdlLS1pY29uLWJnLXdoaXRlIC5pY29uLW1lc3NhZ2VfX2ljb24tbGVmdC1jb250YWluZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5pY29uLW1lc3NhZ2UtLWljb24tYmctd2hpdGUgLmljb24tbWVzc2FnZV9faWNvbi1sZWZ0LWNvbnRhaW5lciBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmljb24tbWVzc2FnZS0taWNvbi1iZy13aGl0ZSAuaWNvbi1tZXNzYWdlX19pY29uLWxlZnQge1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5pY29uLW1lc3NhZ2UtLWJ1eS1ib3gge1xuICBtYXJnaW4tdG9wOiAwLjVyZW07XG59XG4uaWNvbi1tZXNzYWdlLS1idXktYm94IC5pY29uLW1lc3NhZ2VfX2ljb24tbGVmdC1jb250YWluZXIge1xuICBtaW4td2lkdGg6IHVuc2V0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xufVxuLmljb24tbWVzc2FnZS0tYnV5LWJveCAuaWNvbi1tZXNzYWdlX19pY29uLWxlZnQgc3ZnIHtcbiAgZmlsbDogIzAwMDtcbn1cbi5pY29uLW1lc3NhZ2UtLXByb2R1Y3QtaXRlbSB7XG4gIG1hcmdpbi10b3A6IDAuNXJlbTtcbiAgZm9udC1zaXplOiAwLjhyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG4uaWNvbi1tZXNzYWdlLS1wcm9kdWN0LWl0ZW0gLmljb24tbWVzc2FnZV9fbGFiZWwtY29udGFpbmVyIHtcbiAgbWFyZ2luLWxlZnQ6IDAuNXJlbTtcbn1cbi5pY29uLW1lc3NhZ2UtLXByb2R1Y3QtaXRlbSAuaWNvbi1tZXNzYWdlX19pY29uLWxlZnQtY29udGFpbmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgbWFyZ2luLXRvcDogMC4ycmVtO1xuICBtYXJnaW4tcmlnaHQ6IHVuc2V0O1xuICBoZWlnaHQ6IHVuc2V0O1xufVxuLmljb24tbWVzc2FnZS0tcHJvZHVjdC1pdGVtIC5pY29uLW1lc3NhZ2VfX2ljb24tbGVmdCBzdmcge1xuICB3aWR0aDogMC45MzMzMzMzMzMzcmVtO1xuICBoZWlnaHQ6IDAuOTMzMzMzMzMzM3JlbTtcbiAgZmlsbDogIzAwMDtcbn1cbi5pY29uLW1lc3NhZ2UtLXByb2R1Y3QtaXRlbSAuaWNvbi1tZXNzYWdlX19sYWJlbCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5pbmZpbml0ZS1zY3JvbGxpbmcge1xuICBib3JkZXItdG9wLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbiAgbWFyZ2luLXRvcDogMnJlbTtcbiAgcGFkZGluZy10b3A6IDNyZW07XG59XG4uaW5maW5pdGUtc2Nyb2xsaW5nX19hY3Rpb24tY29udGFpbmVyLCAuaW5maW5pdGUtc2Nyb2xsaW5nX19pdGVtLWNvdW50IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG4uaW5maW5pdGUtc2Nyb2xsaW5nX19hY3Rpb24tY29udGFpbmVyIC5pY29uIHtcbiAgZm9udC1zaXplOiAxcmVtO1xufVxuLmluZmluaXRlLXNjcm9sbGluZ19fbG9hZC1wcmV2IHtcbiAgbWFyZ2luLWJvdHRvbTogMnJlbTtcbn1cbi5pbmZpbml0ZS1zY3JvbGxpbmdfX2xvYWQtbmV4dCB7XG4gIG1hcmdpbjogMnJlbSAwO1xufVxuLmluZmluaXRlLXNjcm9sbGluZ19faXRlbS1jb3VudCB7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xuICBmb250LXdlaWdodDogNzAwO1xufVxuLmluZmluaXRlLXNjcm9sbGluZ19fc2Nyb2xsLXVwIHtcbiAgd2lkdGg6IGF1dG87XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIGJvdHRvbTogM3JlbTtcbiAgcmlnaHQ6IDFyZW07XG4gIHotaW5kZXg6IDk5O1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uaW5wdXQtYnV0dG9uIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuLmlucHV0LWJ1dHRvbiAudGV4dC1maWVsZCB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDI7XG4gICAgICAtbXMtZmxleC1wb3NpdGl2ZTogMjtcbiAgICAgICAgICBmbGV4LWdyb3c6IDI7XG59XG4uaW5wdXQtYnV0dG9uIC50ZXh0LWZpZWxkX19pbnB1dCB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDEwcHg7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDEwcHg7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmlucHV0LWJ1dHRvbiAuYnV0dG9uIHtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDEwcHg7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxMHB4O1xuICBwYWRkaW5nOiAwO1xufVxuLmlucHV0LWJ1dHRvbiAuYnV0dG9uX19pY29uLWxlZnQtY29udGFpbmVyIHtcbiAgd2lkdGg6IDJyZW07XG59XG4uaW5wdXQtYnV0dG9uIC5idXR0b24gLmljb24ge1xuICB3aWR0aDogYXV0bztcbiAgaGVpZ2h0OiBhdXRvO1xuICBsaW5lLWhlaWdodDogMi4ycmVtO1xufVxuLmlucHV0LWJ1dHRvbiAuYnV0dG9uIC5pY29uOjpiZWZvcmUge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG59XG4uaW5wdXQtYnV0dG9uIC5idXR0b24gc3ZnIHtcbiAgd2lkdGg6IDJyZW07XG4gIGhlaWdodDogMnJlbTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmluc3BpcmF0aW9uLXBhZ2UtYmFubmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2QwZDBkMDtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIHBhZGRpbmc6IDJyZW0gMnJlbSA0cmVtO1xufVxuLmluc3BpcmF0aW9uLXBhZ2UtYmFubmVyIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5pbnNwaXJhdGlvbi1jb250ZW50IHtcbiAgcGFkZGluZzogMC4xMzMzMzMzMzMzcmVtO1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMTAwJTtcbiAgICAgIGZsZXgtYmFzaXM6IDEwMCU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uaW5zcGlyYXRpb24tY29udGVudF9fY29udGFpbmVyIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuaW5zcGlyYXRpb24tY29udGVudCB7XG4gICAgbWF4LWhlaWdodDogMzMuMzMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLmluc3BpcmF0aW9uLWNvbnRlbnRfX2Fzc2V0IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAzcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSk7XG4gIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDNzIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDNzIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDNzIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKSwgLXdlYmtpdC10cmFuc2Zvcm0gM3MgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpO1xufVxuLmluc3BpcmF0aW9uLWNvbnRlbnRfX3ZhbHVlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZzogMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmluc3BpcmF0aW9uLWNvbnRlbnRfX3ZhbHVlIHtcbiAgICBwYWRkaW5nOiAzcmVtO1xuICB9XG59XG4uaW5zcGlyYXRpb24tY29udGVudCAuaGVhZGxpbmUge1xuICAtbXMtZmxleC1pdGVtLWFsaWduOiBlbmQ7XG4gICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtc2l6ZTogMS40NjY2NjY2NjY3cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xufVxuLmluc3BpcmF0aW9uLWNvbnRlbnRfX3BvbGFybGlnaHQge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAtd2Via2l0LWJveC1wYWNrOiBlbmQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgLXdlYmtpdC1ib3gtZmxleDogMjtcbiAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAyO1xuICAgICAgICAgIGZsZXgtZ3JvdzogMjtcbn1cbi5pbnNwaXJhdGlvbi1jb250ZW50X19wb2xhcmxpZ2h0IC5pbnNwaXJhdGlvbi1jb250ZW50X19zdWJsaW5lLFxuLmluc3BpcmF0aW9uLWNvbnRlbnRfX3BvbGFybGlnaHQgLmluc3BpcmF0aW9uLWNvbnRlbnRfX3NlcGFyYXRvciwgLmluc3BpcmF0aW9uLWNvbnRlbnRfX3BvbGFybGlnaHQtbGluayB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG4uaW5zcGlyYXRpb24tY29udGVudF9fcG9sYXJsaWdodC1saW5rIHtcbiAgY29sb3I6ICNmZmY7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLmluc3BpcmF0aW9uLWNvbnRlbnRfX3BvbGFybGlnaHQtaWNvbiB7XG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7XG4gIGZvbnQtc2l6ZTogNnJlbTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xufVxuLmluc3BpcmF0aW9uLWNvbnRlbnRfX3RleHRib3ggLmluc3BpcmF0aW9uLWNvbnRlbnRfX3N1YmxpbmUsXG4uaW5zcGlyYXRpb24tY29udGVudF9fdGV4dGJveCAuaW5zcGlyYXRpb24tY29udGVudF9fc2VwYXJhdG9yLFxuLmluc3BpcmF0aW9uLWNvbnRlbnRfX3RleHRib3ggLmluc3BpcmF0aW9uLWNvbnRlbnRfX3RleHQsXG4uaW5zcGlyYXRpb24tY29udGVudF9fdGV4dGJveCAuaW5zcGlyYXRpb24tY29udGVudF9fbGluayB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uaW5zcGlyYXRpb24tY29udGVudF9fdGV4dGJveCAuaW5zcGlyYXRpb24tY29udGVudF9fc3VibGluZSxcbi5pbnNwaXJhdGlvbi1jb250ZW50X190ZXh0Ym94IC5pbnNwaXJhdGlvbi1jb250ZW50X190ZXh0LFxuLmluc3BpcmF0aW9uLWNvbnRlbnRfX3RleHRib3ggLmluc3BpcmF0aW9uLWNvbnRlbnRfX2xpbmsge1xuICBmb250LXdlaWdodDogNzAwO1xufVxuLmluc3BpcmF0aW9uLWNvbnRlbnRfX3RleHRib3ggLmluc3BpcmF0aW9uLWNvbnRlbnRfX2xpbmsuYnV0dG9uLS1saW5rIC5idXR0b25fX2xhYmVsLWNvbnRhaW5lciB7XG4gIC13ZWJraXQtYm94LXBhY2s6IHN0YXJ0O1xuICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuLmluc3BpcmF0aW9uLWNvbnRlbnRfX3RleHRib3ggLmluc3BpcmF0aW9uLWNvbnRlbnRfX3NlcGFyYXRvciB7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICM5MjkyOTI7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICM5MjkyOTI7XG4gIG1hcmdpbi1sZWZ0OiAtMC41cmVtO1xuICB3aWR0aDogNHJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmluc3BpcmF0aW9uLWNvbnRlbnRfX3RleHRib3ggLmluc3BpcmF0aW9uLWNvbnRlbnRfX3NlcGFyYXRvciB7XG4gICAgbWFyZ2luLWxlZnQ6IC0xcmVtO1xuICB9XG59XG4uaW5zcGlyYXRpb24tY29udGVudC0tc21hbGwge1xuICAtd2Via2l0LWJveC1mbGV4OiAyO1xuICAgICAgLW1zLWZsZXgtcG9zaXRpdmU6IDI7XG4gICAgICAgICAgZmxleC1ncm93OiAyO1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogNTAlO1xuICAgICAgZmxleC1iYXNpczogNTAlO1xufVxuQG1lZGlhIGFsbCBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKSwgKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpIHtcbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQtLXNtYWxsIHtcbiAgICB3aWR0aDogY2FsYyg1MCUgLSAwLjI2NjY2NjY2NjdyZW0pO1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBjYWxjKDUwJSAtIDAuMjY2NjY2NjY2N3JlbSk7XG4gICAgICAgIGZsZXgtYmFzaXM6IGNhbGMoNTAlIC0gMC4yNjY2NjY2NjY3cmVtKTtcbiAgfVxufVxuLmluc3BpcmF0aW9uLWNvbnRlbnQtLW1lZGl1bSwgLmluc3BpcmF0aW9uLWNvbnRlbnQtLW1lZGl1bS1iaWcsIC5pbnNwaXJhdGlvbi1jb250ZW50LS1iaWcge1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMTAwJTtcbiAgICAgIGZsZXgtYmFzaXM6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50IC5oZWFkbGluZSB7XG4gICAgd2lkdGg6IDc1JTtcbiAgfVxuICAuaW5zcGlyYXRpb24tY29udGVudC0tc21hbGwge1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAzMy4zMzMzMzMzMzMzJTtcbiAgICAgICAgZmxleC1iYXNpczogMzMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQtLXNtYWxsIC5oZWFkbGluZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQtLW1lZGl1bSB7XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDUwJTtcbiAgICAgICAgZmxleC1iYXNpczogNTAlO1xuICB9XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50LS1tZWRpdW0tYmlnIHtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogNjYuNjY2NjY2NjY2NyU7XG4gICAgICAgIGZsZXgtYmFzaXM6IDY2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50LS1iaWcge1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAxMDAlO1xuICAgICAgICBmbGV4LWJhc2lzOiAxMDAlO1xuICB9XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50LS1tZWRpdW0uaW5zcGlyYXRpb24tY29udGVudC0taXMtdGV4dGJveCwgLmluc3BpcmF0aW9uLWNvbnRlbnQtLW1lZGl1bS1iaWcuaW5zcGlyYXRpb24tY29udGVudC0taXMtdGV4dGJveCwgLmluc3BpcmF0aW9uLWNvbnRlbnQtLWJpZy5pbnNwaXJhdGlvbi1jb250ZW50LS1pcy10ZXh0Ym94IHtcbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgfVxuICAuaW5zcGlyYXRpb24tY29udGVudC0tbWVkaXVtLmluc3BpcmF0aW9uLWNvbnRlbnQtLWlzLXRleHRib3ggLmJ1dHRvbi0tdy1hdXRvLCAuaW5zcGlyYXRpb24tY29udGVudC0tbWVkaXVtLWJpZy5pbnNwaXJhdGlvbi1jb250ZW50LS1pcy10ZXh0Ym94IC5idXR0b24tLXctYXV0bywgLmluc3BpcmF0aW9uLWNvbnRlbnQtLWJpZy5pbnNwaXJhdGlvbi1jb250ZW50LS1pcy10ZXh0Ym94IC5idXR0b24tLXctYXV0byB7XG4gICAgbWF4LXdpZHRoOiA1MCU7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIH1cbn1cbkBtZWRpYSBhbGwgYW5kICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSksICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQtLXNtYWxsIHtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogY2FsYygzMy4zMzMzMzMzMzMzJSAtIDAuMjY2NjY2NjY2N3JlbSk7XG4gICAgICAgIGZsZXgtYmFzaXM6IGNhbGMoMzMuMzMzMzMzMzMzMyUgLSAwLjI2NjY2NjY2NjdyZW0pO1xuICB9XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50LS1tZWRpdW0ge1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBjYWxjKDUwJSAtIDAuMjY2NjY2NjY2N3JlbSk7XG4gICAgICAgIGZsZXgtYmFzaXM6IGNhbGMoNTAlIC0gMC4yNjY2NjY2NjY3cmVtKTtcbiAgfVxuICAuaW5zcGlyYXRpb24tY29udGVudC0tbWVkaXVtLWJpZyB7XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGNhbGMoNjYuNjY2NjY2NjY2NyUgLSAwLjI2NjY2NjY2NjdyZW0pO1xuICAgICAgICBmbGV4LWJhc2lzOiBjYWxjKDY2LjY2NjY2NjY2NjclIC0gMC4yNjY2NjY2NjY3cmVtKTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuaW5zcGlyYXRpb24tY29udGVudC0taXMtcG9sYXJsaWdodCAuaW5zcGlyYXRpb24tY29udGVudF9fdmFsdWUge1xuICAgIHBhZGRpbmc6IDRyZW0gNnJlbSAzcmVtIDNyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQ6aG92ZXIgLmhlYWRsaW5lIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50OmhvdmVyIC5pbnNwaXJhdGlvbi1jb250ZW50X19hc3NldCB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG4gIH1cbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQ6aG92ZXIuaW5zcGlyYXRpb24tY29udGVudC0taXMtcG9sYXJsaWdodCAuaW5zcGlyYXRpb24tY29udGVudF9fc3VibGluZSxcbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQ6aG92ZXIuaW5zcGlyYXRpb24tY29udGVudC0taXMtcG9sYXJsaWdodCAuaW5zcGlyYXRpb24tY29udGVudF9fc2VwYXJhdG9yLFxuICAuaW5zcGlyYXRpb24tY29udGVudDpob3Zlci5pbnNwaXJhdGlvbi1jb250ZW50LS1pcy1wb2xhcmxpZ2h0IC5pbnNwaXJhdGlvbi1jb250ZW50X19wb2xhcmxpZ2h0LWxpbmsge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGNvbG9yOiAjNGI0YjRkO1xuICB9XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50OmhvdmVyLmluc3BpcmF0aW9uLWNvbnRlbnQtLWlzLXBvbGFybGlnaHQgLmluc3BpcmF0aW9uLWNvbnRlbnRfX3ZhbHVlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gICAgcGFkZGluZzogNHJlbSA2cmVtIDNyZW0gMnJlbTtcbiAgfVxuICAuaW5zcGlyYXRpb24tY29udGVudDpob3Zlci5pbnNwaXJhdGlvbi1jb250ZW50LS1pcy1wb2xhcmxpZ2h0IC5pbnNwaXJhdGlvbi1jb250ZW50X19wb2xhcmxpZ2h0LWljb24ge1xuICAgIGNvbG9yOiAjZmVjYzAwO1xuICB9XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50OmhvdmVyLmluc3BpcmF0aW9uLWNvbnRlbnQtLWlzLXBvbGFybGlnaHQgLmluc3BpcmF0aW9uLWNvbnRlbnRfX3BvbGFybGlnaHQtbGluayB7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gIH1cbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQ6aG92ZXIuaW5zcGlyYXRpb24tY29udGVudC0taXMtcG9sYXJsaWdodCAuaW5zcGlyYXRpb24tY29udGVudC0tc21hbGwgLmluc3BpcmF0aW9uLWNvbnRlbnRfX3ZhbHVlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gICAgcGFkZGluZzogNHJlbSA0cmVtIDNyZW0gMnJlbTtcbiAgfVxuICAuaW5zcGlyYXRpb24tY29udGVudDpob3Zlci5pbnNwaXJhdGlvbi1jb250ZW50LS1pcy1wb2xhcmxpZ2h0IC5pbnNwaXJhdGlvbi1jb250ZW50LS1zbWFsbCAuaW5zcGlyYXRpb24tY29udGVudF9fcG9sYXJsaWdodCB7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIH1cbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQ6aG92ZXIuaW5zcGlyYXRpb24tY29udGVudC0taXMtcG9sYXJsaWdodCAuaW5zcGlyYXRpb24tY29udGVudC0tc21hbGwgLmluc3BpcmF0aW9uLWNvbnRlbnRfX3N1YmxpbmUge1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiA2MCU7XG4gICAgICAgIGZsZXgtYmFzaXM6IDYwJTtcbiAgfVxuICAuaW5zcGlyYXRpb24tY29udGVudDpob3Zlci5pbnNwaXJhdGlvbi1jb250ZW50LS1pcy10ZXh0Ym94IC5pbnNwaXJhdGlvbi1jb250ZW50X192YWx1ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI0MiwgMTg5LCAwLjgpO1xuICB9XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50OmhvdmVyLmluc3BpcmF0aW9uLWNvbnRlbnQtLWlzLXRleHRib3ggLmluc3BpcmF0aW9uLWNvbnRlbnRfX3N1YmxpbmUsXG4gIC5pbnNwaXJhdGlvbi1jb250ZW50OmhvdmVyLmluc3BpcmF0aW9uLWNvbnRlbnQtLWlzLXRleHRib3ggLmluc3BpcmF0aW9uLWNvbnRlbnRfX3NlcGFyYXRvcixcbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQ6aG92ZXIuaW5zcGlyYXRpb24tY29udGVudC0taXMtdGV4dGJveCAuaW5zcGlyYXRpb24tY29udGVudF9fdGV4dCxcbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQ6aG92ZXIuaW5zcGlyYXRpb24tY29udGVudC0taXMtdGV4dGJveCAuaW5zcGlyYXRpb24tY29udGVudF9fbGluayB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQ6aG92ZXIuaW5zcGlyYXRpb24tY29udGVudC0taXMtdGV4dGJveCAuaW5zcGlyYXRpb24tY29udGVudF9fc3VibGluZSxcbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQ6aG92ZXIuaW5zcGlyYXRpb24tY29udGVudC0taXMtdGV4dGJveCAuaW5zcGlyYXRpb24tY29udGVudF9fdGV4dCxcbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQ6aG92ZXIuaW5zcGlyYXRpb24tY29udGVudC0taXMtdGV4dGJveCAuaW5zcGlyYXRpb24tY29udGVudF9fbGluayB7XG4gICAgY29sb3I6ICM0YjRiNGQ7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgfVxuICAuaW5zcGlyYXRpb24tY29udGVudDpob3Zlci5pbnNwaXJhdGlvbi1jb250ZW50LS1pcy10ZXh0Ym94IC5pbnNwaXJhdGlvbi1jb250ZW50X19saW5rIHtcbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICAgIC8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgfVxuICAuaW5zcGlyYXRpb24tY29udGVudDpob3Zlci5pbnNwaXJhdGlvbi1jb250ZW50LS1pcy10ZXh0Ym94IC5pbnNwaXJhdGlvbi1jb250ZW50X19saW5rOmhvdmVyLCAuaW5zcGlyYXRpb24tY29udGVudDpob3Zlci5pbnNwaXJhdGlvbi1jb250ZW50LS1pcy10ZXh0Ym94IC5pbnNwaXJhdGlvbi1jb250ZW50X19saW5rOmZvY3VzLCAuaW5zcGlyYXRpb24tY29udGVudDpob3Zlci5pbnNwaXJhdGlvbi1jb250ZW50LS1pcy10ZXh0Ym94IC5pbnNwaXJhdGlvbi1jb250ZW50X19saW5rOmFjdGl2ZSB7XG4gICAgY29sb3I6ICNmZmY7XG4gIH1cbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQ6aG92ZXIuaW5zcGlyYXRpb24tY29udGVudC0taXMtdGV4dGJveCAuaW5zcGlyYXRpb24tY29udGVudF9fbGluay5idXR0b24tLWxpbms6aG92ZXIsIC5pbnNwaXJhdGlvbi1jb250ZW50OmhvdmVyLmluc3BpcmF0aW9uLWNvbnRlbnQtLWlzLXRleHRib3ggLmluc3BpcmF0aW9uLWNvbnRlbnRfX2xpbmsuYnV0dG9uLS1saW5rOmZvY3VzLCAuaW5zcGlyYXRpb24tY29udGVudDpob3Zlci5pbnNwaXJhdGlvbi1jb250ZW50LS1pcy10ZXh0Ym94IC5pbnNwaXJhdGlvbi1jb250ZW50X19saW5rLmJ1dHRvbi0tbGluazphY3RpdmUge1xuICAgIGNvbG9yOiAjNGI0YjRkO1xuICB9XG59XG4uaW5zcGlyYXRpb24tY29udGVudCAuc2VvLWltYWdlX19pbWFnZSB7XG4gIGhlaWdodDogMTAwJTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmluc3BpcmF0aW9uLWNvbnRlbnQtbW9kYWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uaW5zcGlyYXRpb24tY29udGVudC1tb2RhbF9fcG9sYXJsaWdodCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LXBhY2s6IHN0YXJ0O1xuICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAtd2Via2l0LWJveC1mbGV4OiAyO1xuICAgICAgLW1zLWZsZXgtcG9zaXRpdmU6IDI7XG4gICAgICAgICAgZmxleC1ncm93OiAyO1xufVxuLmluc3BpcmF0aW9uLWNvbnRlbnQtbW9kYWxfX3BvbGFybGlnaHQtaWNvbiB7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbiAgbWFyZ2luLXRvcDogLTAuNzVyZW07XG4gIGNvbG9yOiAjZmVjYzAwO1xufVxuLmluc3BpcmF0aW9uLWNvbnRlbnQtbW9kYWxfX3BvbGFybGlnaHQtbGluayB7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG4uaW5zcGlyYXRpb24tY29udGVudC1tb2RhbF9fdmFsdWUge1xuICBwYWRkaW5nOiAwIDEuNXJlbTtcbn1cbi5pbnNwaXJhdGlvbi1jb250ZW50LW1vZGFsX19hc3NldCB7XG4gIG1hcmdpbi1ib3R0b206IDFyZW07XG59XG4uaW5zcGlyYXRpb24tY29udGVudC1tb2RhbF9fYXNzZXQgLnNlby1pbWFnZV9faW1hZ2Uge1xuICB3aWR0aDogOTAlO1xuICBtYXJnaW46IDAgYXV0bztcbiAgZGlzcGxheTogYmxvY2s7XG59XG4uaW5zcGlyYXRpb24tY29udGVudC1tb2RhbCAuYnV0dG9uIHtcbiAgZGlzcGxheTogYmxvY2s7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5rZWVuLXNsaWRlci1jYXJvdXNlbCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5rZWVuLXNsaWRlci1jYXJvdXNlbF9fY29udGFpbmVyIHtcbiAgd2lkdGg6IDEwMCU7XG59XG4ua2Vlbi1zbGlkZXItY2Fyb3VzZWxfX2Fycm93IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW46IDA7XG4gIHRvcDogMzMuMzMzMzMzMzMzMyU7XG59XG4ua2Vlbi1zbGlkZXItY2Fyb3VzZWxfX2Fycm93LS1wcmV2IHtcbiAgbGVmdDogNSU7XG59XG4ua2Vlbi1zbGlkZXItY2Fyb3VzZWxfX2Fycm93LS1uZXh0IHtcbiAgcmlnaHQ6IDUlO1xufVxuLmtlZW4tc2xpZGVyLWNhcm91c2VsX19kb3RzIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1hcmdpbi10b3A6IDEuMnJlbTtcbn1cbi5rZWVuLXNsaWRlci1jYXJvdXNlbF9fZG90cyAua2Vlbi1zbGlkZXItY2Fyb3VzZWxfX2RvdCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDAgMC41cmVtO1xuICB3aWR0aDogMC4zMzMzMzMzMzMzcmVtO1xuICBoZWlnaHQ6IDAuMzMzMzMzMzMzM3JlbTtcbiAgYmFja2dyb3VuZDogI2VjZWNlYztcbiAgYm9yZGVyLXdpZHRoOiAwLjQ2NjY2NjY2NjdyZW07XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2VjZWNlYztcbiAgYm9yZGVyLXJhZGl1czogOTk5OXB4O1xuICBmb250LXNpemU6IDA7XG59XG4ua2Vlbi1zbGlkZXItY2Fyb3VzZWxfX2RvdHMgLmtlZW4tc2xpZGVyLWNhcm91c2VsX19kb3Q6aG92ZXIge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ua2Vlbi1zbGlkZXItY2Fyb3VzZWxfX2RvdHMgLmtlZW4tc2xpZGVyLWNhcm91c2VsX19kb3QuYWN0aXZlIHtcbiAgd2lkdGg6IDAuMzMzMzMzMzMzM3JlbTtcbiAgaGVpZ2h0OiAwLjMzMzMzMzMzMzNyZW07XG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGJvcmRlci13aWR0aDogMC40NjY2NjY2NjY3cmVtO1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICNmZWNjMDA7XG59XG4ua2Vlbi1zbGlkZXItY2Fyb3VzZWwtLWNtcyAua2Vlbi1zbGlkZXItY2Fyb3VzZWxfX2Fycm93LCAua2Vlbi1zbGlkZXItY2Fyb3VzZWwtLXByb2R1Y3QtZmFtaWx5IC5rZWVuLXNsaWRlci1jYXJvdXNlbF9fYXJyb3cge1xuICB0b3A6IDA7XG4gIGJvdHRvbTogMDtcbiAgbWFyZ2luOiBhdXRvIDA7XG59XG4ua2Vlbi1zbGlkZXItY2Fyb3VzZWwtLWNtcyAua2Vlbi1zbGlkZXItY2Fyb3VzZWxfX2Fycm93LS1wcmV2LCAua2Vlbi1zbGlkZXItY2Fyb3VzZWwtLXByb2R1Y3QtZmFtaWx5IC5rZWVuLXNsaWRlci1jYXJvdXNlbF9fYXJyb3ctLXByZXYge1xuICBsZWZ0OiAtNiU7XG59XG4ua2Vlbi1zbGlkZXItY2Fyb3VzZWwtLWNtcyAua2Vlbi1zbGlkZXItY2Fyb3VzZWxfX2Fycm93LS1uZXh0LCAua2Vlbi1zbGlkZXItY2Fyb3VzZWwtLXByb2R1Y3QtZmFtaWx5IC5rZWVuLXNsaWRlci1jYXJvdXNlbF9fYXJyb3ctLW5leHQge1xuICByaWdodDogLTYlO1xufVxuLmtlZW4tc2xpZGVyLWNhcm91c2VsLS1pbWFnZS1zbGlkZXIgLmtlZW4tc2xpZGVyLWNhcm91c2VsX19hcnJvdyB7XG4gIHRvcDogY2FsYyg1MCUgLSAxLjVyZW0pO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmtlZW4tc2xpZGVyLWNhcm91c2VsLS1pbWFnZS1zbGlkZXIgLmtlZW4tc2xpZGVyLWNhcm91c2VsX19hcnJvdyB7XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBtYXJnaW46IGF1dG8gMDtcbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICAgIC8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgfVxuICAua2Vlbi1zbGlkZXItY2Fyb3VzZWwtLWltYWdlLXNsaWRlciAua2Vlbi1zbGlkZXItY2Fyb3VzZWxfX2Fycm93LS1wcmV2IHtcbiAgICBsZWZ0OiAtNiU7XG4gIH1cbiAgLmtlZW4tc2xpZGVyLWNhcm91c2VsLS1pbWFnZS1zbGlkZXIgLmtlZW4tc2xpZGVyLWNhcm91c2VsX19hcnJvdy0tbmV4dCB7XG4gICAgcmlnaHQ6IC02JTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmtlZW4tc2xpZGVyLWNhcm91c2VsIC5rZWVuLXNsaWRlcl9fc2xpZGUucHJvZHVjdC1ib3gge1xuICAgIC8qKlxuICAgICAqIFdlIG5lZWQgdGhlICFpbXBvcnRhbnQgaW4gdGhpcyBzdHlsZXMgYmVjYXVzZSB0aGUga2VlbiBzbGlkZXIgYWRkcyBpbmxpbmUgc3R5bGVzIHRvIHRoZSBzbGlkZXNcbiAgICAgKiBmb3IgbWluLXdpZHRoLCBtYXgtd2lkdGggYW5kIHRyYW5zZm9ybVxuICAgICAqL1xuICAgIC8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuICAgIG1pbi13aWR0aDogY2FsYygyNSUgLSA3LjVweCkgIWltcG9ydGFudDtcbiAgICBtYXgtd2lkdGg6IGNhbGMoMjUlIC0gNy41cHgpICFpbXBvcnRhbnQ7XG4gICAgLyogc3R5bGVsaW50LWVuYmFibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4gIH1cbn1cblxuLmtlZW4tc2xpZGVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTtcbiAgLWtodG1sLXVzZXItc2VsZWN0OiBub25lO1xuICAtbXMtdG91Y2gtYWN0aW9uOiBwYW4teTtcbiAgICAgIHRvdWNoLWFjdGlvbjogcGFuLXk7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG4ua2Vlbi1zbGlkZXJfX3NsaWRlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogMTAwJTtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG4ua2Vlbi1zbGlkZXJfX3NsaWRlIC5jdGEtYnV0dG9uIHtcbiAgbWFyZ2luLXRvcDogYXV0bztcbn1cbi5rZWVuLXNsaWRlcltkYXRhLWtlZW4tc2xpZGVyLXZdIHtcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbn1cbi5rZWVuLXNsaWRlcltkYXRhLWtlZW4tc2xpZGVyLXZdIC5rZWVuLXNsaWRlcl9fc2xpZGUge1xuICB3aWR0aDogMTAwJTtcbn1cbi5rZWVuLXNsaWRlciBbZGF0YS1rZWVuLXNsaWRlci1tb3Zlc10gKiB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ubG9hZGluZy1pbmRpY2F0b3Ige1xuICBkaXNwbGF5OiBub25lO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgcmlnaHQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICB6LWluZGV4OiAyMDAxO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG59XG4ubG9hZGluZy1pbmRpY2F0b3ItLWZpeGVkIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBoZWlnaHQ6IDEwMHZoO1xufVxuLmxvYWRpbmctaW5kaWNhdG9yLS1hYnNvbHV0ZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbn1cbi5sb2FkaW5nLWluZGljYXRvcl9fYWN0aXZlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ubG9hZGluZy1pbmRpY2F0b3JfX2NvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmxvYWRpbmctaW5kaWNhdG9yX19pbWFnZSB7XG4gIHdpZHRoOiA1MCU7XG59XG4ubG9hZGluZy1pbmRpY2F0b3JfX3RleHQge1xuICBmb250LXNpemU6IDEuNjY2NjY2NjY2N3JlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmxvYWRpbmctc3Bpbm5lcl9fZG90cyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNHJlbTtcbn1cbi5sb2FkaW5nLXNwaW5uZXJfX2RvdCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtMC42cmVtO1xuICB3aWR0aDogMC41cmVtO1xuICBoZWlnaHQ6IDAuNXJlbTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAxLCAxLCAwKTtcbiAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMCwgMSwgMSwgMCk7XG59XG4ubG9hZGluZy1zcGlubmVyX19kb3Q6bnRoLWNoaWxkKDEpIHtcbiAgbGVmdDogOHB4O1xuICAtd2Via2l0LWFuaW1hdGlvbjogbGRzLWVsbGlwc2lzMSAwLjZzIGluZmluaXRlO1xuICAgICAgICAgIGFuaW1hdGlvbjogbGRzLWVsbGlwc2lzMSAwLjZzIGluZmluaXRlO1xufVxuLmxvYWRpbmctc3Bpbm5lcl9fZG90Om50aC1jaGlsZCgyKSB7XG4gIGxlZnQ6IDhweDtcbiAgLXdlYmtpdC1hbmltYXRpb246IGxkcy1lbGxpcHNpczIgMC42cyBpbmZpbml0ZTtcbiAgICAgICAgICBhbmltYXRpb246IGxkcy1lbGxpcHNpczIgMC42cyBpbmZpbml0ZTtcbn1cbi5sb2FkaW5nLXNwaW5uZXJfX2RvdDpudGgtY2hpbGQoMykge1xuICBsZWZ0OiAyNHB4O1xuICAtd2Via2l0LWFuaW1hdGlvbjogbGRzLWVsbGlwc2lzMiAwLjZzIGluZmluaXRlO1xuICAgICAgICAgIGFuaW1hdGlvbjogbGRzLWVsbGlwc2lzMiAwLjZzIGluZmluaXRlO1xufVxuLmxvYWRpbmctc3Bpbm5lcl9fZG90Om50aC1jaGlsZCg0KSB7XG4gIGxlZnQ6IDQwcHg7XG4gIC13ZWJraXQtYW5pbWF0aW9uOiBsZHMtZWxsaXBzaXMzIDAuNnMgaW5maW5pdGU7XG4gICAgICAgICAgYW5pbWF0aW9uOiBsZHMtZWxsaXBzaXMzIDAuNnMgaW5maW5pdGU7XG59XG4ubG9hZGluZy1zcGlubmVyLS1kYXJrIC5sb2FkaW5nLXNwaW5uZXJfX2RvdCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0YjRiNGQ7XG59XG5ALXdlYmtpdC1rZXlmcmFtZXMgbGRzLWVsbGlwc2lzMSB7XG4gIDAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xuICB9XG4gIDEwMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgbGRzLWVsbGlwc2lzMSB7XG4gIDAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xuICB9XG4gIDEwMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cbkAtd2Via2l0LWtleWZyYW1lcyBsZHMtZWxsaXBzaXMzIHtcbiAgMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbiAgMTAwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcbiAgfVxufVxuQGtleWZyYW1lcyBsZHMtZWxsaXBzaXMzIHtcbiAgMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbiAgMTAwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcbiAgfVxufVxuQC13ZWJraXQta2V5ZnJhbWVzIGxkcy1lbGxpcHNpczIge1xuICAwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICB9XG4gIDEwMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTZweCwgMCk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTtcbiAgfVxufVxuQGtleWZyYW1lcyBsZHMtZWxsaXBzaXMyIHtcbiAgMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgfVxuICAxMDAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDE2cHgsIDApO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTZweCwgMCk7XG4gIH1cbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmxvZ28ge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IHN0YXJ0O1xuICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLmxvZ29fX2xvZ28ge1xuICB3aWR0aDogN3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLmxvZ29fX2xvZ28ge1xuICAgIHdpZHRoOiA3cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5sb2dvX19sb2dvIHtcbiAgICB3aWR0aDogMTEuODY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLmxvZ28tLXByb2R1Y3QtY29uZmlndXJhdG9yLCAubG9nby0tY2hlY2tvdXQge1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xuICBtYXJnaW4tdG9wOiAtMC42NjY2NjY2NjY3cmVtO1xuICBtYXJnaW4tYm90dG9tOiAtMC42NjY2NjY2NjY3cmVtO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ubW9kYWwtd2luZG93IHtcbiAgei1pbmRleDogMjAwMDtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIG9wYWNpdHk6IDA7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xuICAtd2Via2l0LXRyYW5zaXRpb246IHZpc2liaWxpdHkgMHMgbGluZWFyIDAuMjVzLCBvcGFjaXR5IDAuMjVzIDBzLCAtd2Via2l0LXRyYW5zZm9ybSAwLjI1cztcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcyBsaW5lYXIgMC4yNXMsIG9wYWNpdHkgMC4yNXMgMHMsIC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAwLjI1cywgb3BhY2l0eSAwLjI1cyAwcywgdHJhbnNmb3JtIDAuMjVzO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAwLjI1cywgb3BhY2l0eSAwLjI1cyAwcywgdHJhbnNmb3JtIDAuMjVzLCAtd2Via2l0LXRyYW5zZm9ybSAwLjI1cztcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG4ubW9kYWwtd2luZG93X19vdmVybGF5IHtcbiAgei1pbmRleDogMTAwMDtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIG9wYWNpdHk6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS4xKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcyBsaW5lYXIgMC4yNXMsIG9wYWNpdHkgMC4yNXMgMHMsIC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAwLjI1cywgb3BhY2l0eSAwLjI1cyAwcywgLXdlYmtpdC10cmFuc2Zvcm0gMC4yNXM7XG4gIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMHMgbGluZWFyIDAuMjVzLCBvcGFjaXR5IDAuMjVzIDBzLCB0cmFuc2Zvcm0gMC4yNXM7XG4gIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMHMgbGluZWFyIDAuMjVzLCBvcGFjaXR5IDAuMjVzIDBzLCB0cmFuc2Zvcm0gMC4yNXMsIC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzO1xufVxuLm1vZGFsLXdpbmRvd19fb3ZlcmxheV9ibHVyIHtcbiAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNXB4KTtcbiAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNXB4KTtcbn1cbi5tb2RhbC13aW5kb3dfX2NvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwb2ludGVyLWV2ZW50czogYWxsO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5tb2RhbC13aW5kb3dfX2NvbnRhaW5lciB7XG4gICAgaGVpZ2h0OiA5MCU7XG4gICAgd2lkdGg6IDkwJTtcbiAgfVxufVxuLm1vZGFsLXdpbmRvd19faGVhZGVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAwLjc1cmVtIDEuNXJlbTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLm1vZGFsLXdpbmRvd19faGVhZGVyIC5oZWFkbGluZSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtaW5saW5lLWJveDtcbiAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94O1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICB3aWR0aDogY2FsYygxMDAlIC0gMi40cmVtKTtcbiAgZm9udC1zaXplOiAxLjQ2NjY2NjY2NjdyZW07XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5tb2RhbC13aW5kb3dfX2hlYWRlciAuaGVhZGxpbmUge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAyLjRyZW07XG4gIH1cbn1cbi5tb2RhbC13aW5kb3dfX2Nsb3NlLWJ1dHRvbi1jb250YWluZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwO1xuICB0b3A6IDA7XG59XG4ubW9kYWwtd2luZG93X19jbG9zZS1idXR0b24tY29udGFpbmVyIC5pY29uLWJ1dHRvbiB7XG4gIHdpZHRoOiAxLjY2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMS42NjY2NjY2NjY3cmVtO1xuICBtYXJnaW46IDAuNXJlbTtcbn1cbi5tb2RhbC13aW5kb3dfX2Nsb3NlLWJ1dHRvbi1jb250YWluZXIgLmljb24tYnV0dG9uX19pY29uLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxLjY2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMS42NjY2NjY2NjY3cmVtO1xufVxuLm1vZGFsLXdpbmRvd19fY2xvc2UtYnV0dG9uLWNvbnRhaW5lciAuaWNvbi1idXR0b24gLmljb24tLWNsb3NlIHtcbiAgd2lkdGg6IDEuNjY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAxLjY2NjY2NjY2NjdyZW07XG59XG4ubW9kYWwtd2luZG93X19jbG9zZS1idXR0b24tY29udGFpbmVyIC5pY29uLWJ1dHRvbiAuaWNvbi0tY2xvc2Ugc3ZnIHtcbiAgd2lkdGg6IDEuNjY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAxLjY2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5tb2RhbC13aW5kb3dfX2Nsb3NlLWJ1dHRvbi1jb250YWluZXIgLmljb24tYnV0dG9uIHtcbiAgICB3aWR0aDogMXJlbTtcbiAgICBoZWlnaHQ6IDFyZW07XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG1hcmdpbjogMC43NXJlbTtcbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgfVxuICAubW9kYWwtd2luZG93X19jbG9zZS1idXR0b24tY29udGFpbmVyIC5pY29uLWJ1dHRvbl9faWNvbi1jb250YWluZXIge1xuICAgIHdpZHRoOiAxcmVtO1xuICAgIGhlaWdodDogMXJlbTtcbiAgfVxuICAubW9kYWwtd2luZG93X19jbG9zZS1idXR0b24tY29udGFpbmVyIC5pY29uLWJ1dHRvbiAuaWNvbi0tY2xvc2Uge1xuICAgIHdpZHRoOiAxcmVtO1xuICAgIGhlaWdodDogMXJlbTtcbiAgfVxuICAubW9kYWwtd2luZG93X19jbG9zZS1idXR0b24tY29udGFpbmVyIC5pY29uLWJ1dHRvbiAuaWNvbi0tY2xvc2Ugc3ZnIHtcbiAgICB3aWR0aDogMXJlbTtcbiAgICBoZWlnaHQ6IDFyZW07XG4gIH1cbn1cbi5tb2RhbC13aW5kb3dfX2NvbnRlbnQge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBwYWRkaW5nOiAyLjVyZW0gMS41cmVtIDEuNXJlbTtcbn1cbi5tb2RhbC13aW5kb3dfX2NvbnRlbnQ6OmFmdGVyIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbShyZ2JhKDI1NSwgMjU1LCAyNTUsIDApKSwgY29sb3Itc3RvcCg5MCUsIHJnYigyNTUsIDI1NSwgMjU1KSkpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDApLCByZ2IoMjU1LCAyNTUsIDI1NSkgOTAlKTtcbn1cbi5tb2RhbC13aW5kb3dfX2FjdGl2ZSB7XG4gIG9wYWNpdHk6IDE7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAtd2Via2l0LXRyYW5zaXRpb246IHZpc2liaWxpdHkgMHMgbGluZWFyIDBzLCBvcGFjaXR5IDAuMjVzIDBzLCAtd2Via2l0LXRyYW5zZm9ybSAwLjI1cztcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcyBsaW5lYXIgMHMsIG9wYWNpdHkgMC4yNXMgMHMsIC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAwcywgb3BhY2l0eSAwLjI1cyAwcywgdHJhbnNmb3JtIDAuMjVzO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAwcywgb3BhY2l0eSAwLjI1cyAwcywgdHJhbnNmb3JtIDAuMjVzLCAtd2Via2l0LXRyYW5zZm9ybSAwLjI1cztcbn1cbi5tb2RhbC13aW5kb3ctLW1lZGl1bSAubW9kYWwtd2luZG93X19jb250YWluZXIge1xuICBtYXgtd2lkdGg6IDY1LjMzMzMzMzMzMzNyZW07XG59XG4ubW9kYWwtd2luZG93IC5tb2RhbC13aW5kb3dfX2Nsb3NlLXdpbmRvdyAuYnV0dG9uIHtcbiAgYm9yZGVyLXJhZGl1czogdW5zZXQ7XG59XG4ubW9kYWwtd2luZG93LS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAubW9kYWwtd2luZG93X19jb250YWluZXIge1xuICBoZWlnaHQ6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yIC5tb2RhbC13aW5kb3dfX2NvbnRhaW5lciB7XG4gICAgbWF4LXdpZHRoOiA3NSU7XG4gICAgbGVmdDogNTAlO1xuICAgIGhlaWdodDogNTAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAubW9kYWwtd2luZG93LS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAubW9kYWwtd2luZG93X19jb250YWluZXIge1xuICAgIG1heC13aWR0aDogNjAwcHg7XG4gICAgbGVmdDogNTAlO1xuICAgIGhlaWdodDogNTAlO1xuICB9XG59XG4ubW9kYWwtd2luZG93LS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAubW9kYWwtd2luZG93X19jb250YWluZXIgLm1vZGFsLXdpbmRvd19fY2xvc2Utd2luZG93IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yIC5tb2RhbC13aW5kb3dfX2NvbnRlbnQge1xuICBwYWRkaW5nOiAxLjVyZW0gMS41cmVtIDEuNXJlbTtcbn1cbi5tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yIC5tb2RhbC13aW5kb3dfX2hlYWRlciAuaGVhZGxpbmUge1xuICB3aWR0aDogMTAwJTtcbiAgZm9udC1zaXplOiAycmVtO1xuICBmb250LXdlaWdodDogNDAwO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICBtYXJnaW4tdG9wOiAxcmVtO1xufVxuLm1vZGFsLXdpbmRvdy0tcHJvZHVjdC1jb25maWd1cmF0b3Itc21hbGwgLm1vZGFsLXdpbmRvd19fY29udGFpbmVyIHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yLXNtYWxsIC5tb2RhbC13aW5kb3dfX2NvbnRhaW5lciB7XG4gICAgd2lkdGg6IDUwJTtcbiAgICBtYXgtd2lkdGg6IDEyMDBweDtcbiAgICBtaW4td2lkdGg6IGNhbGMoMTIwMHB4IC8gMik7XG4gICAgaGVpZ2h0OiAzMCU7XG4gICAgbWluLWhlaWdodDogMTYuNjY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLm1vZGFsLXdpbmRvdy0tcHJvZHVjdC1jb25maWd1cmF0b3Itc21hbGwgLm1vZGFsLXdpbmRvd19faGVhZGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbn1cbi5tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yLXNtYWxsIC5tb2RhbC13aW5kb3dfX2NvbnRlbnQge1xuICBwYWRkaW5nOiAxLjVyZW0gNHJlbSAxLjVyZW07XG59XG4ubW9kYWwtd2luZG93LS1wcm9kdWN0LWNvbmZpZ3VyYXRvci1uby1kcml2ZXIgLm1vZGFsLXdpbmRvd19fY29udGFpbmVyIHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yLW5vLWRyaXZlciAubW9kYWwtd2luZG93X19jb250YWluZXIge1xuICAgIGhlaWdodDogYXV0bztcbiAgICBtaW4taGVpZ2h0OiB1bnNldDtcbiAgfVxufVxuLm1vZGFsLXdpbmRvdy0tcHJvZHVjdC1jb25maWd1cmF0b3Itbm8tZHJpdmVyIC5tb2RhbC13aW5kb3dfX2NvbnRhaW5lciAubW9kYWwtd2luZG93X19jbG9zZS13aW5kb3cge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm1vZGFsLXdpbmRvdy0tcHJvZHVjdC1jb25maWd1cmF0b3Itbm8tZHJpdmVyIC5tb2RhbC13aW5kb3dfX2NvbnRhaW5lciAubW9kYWwtd2luZG93X19jbG9zZS13aW5kb3cge1xuICAgIC13ZWJraXQtYm94LXBhY2s6IGVuZDtcbiAgICAgICAgLW1zLWZsZXgtcGFjazogZW5kO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gICAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgfVxufVxuLm1vZGFsLXdpbmRvdy0tcHJvZHVjdC1jb25maWd1cmF0b3Itbm8tZHJpdmVyIC5tb2RhbC13aW5kb3dfX2NvbnRhaW5lciAubW9kYWwtd2luZG93X19jbG9zZS13aW5kb3cgLmJ1dHRvbiB7XG4gIGJvcmRlci1yYWRpdXM6IDAuNjY2NjY2NjY2N3JlbTtcbn1cbi5tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yLW5vLWRyaXZlciAubW9kYWwtd2luZG93X19tb2RhbC1hY3Rpb25zIHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLm1vZGFsLXdpbmRvdy0tcHJvZHVjdC1jb25maWd1cmF0b3Itbm8tZHJpdmVyIC5tb2RhbC13aW5kb3dfX21vZGFsLWFjdGlvbnMgLm1vdmUtZm9yd2FyZCB7XG4gIG1hcmdpbi10b3A6IDAuNXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm1vZGFsLXdpbmRvdy0tcHJvZHVjdC1jb25maWd1cmF0b3Itbm8tZHJpdmVyIC5tb2RhbC13aW5kb3dfX21vZGFsLWFjdGlvbnMgLm1vdmUtZm9yd2FyZCB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tbGVmdDogMC41cmVtO1xuICB9XG59XG4ubW9kYWwtd2luZG93LS1wcm9kdWN0LWNvbmZpZ3VyYXRvci1uby1kcml2ZXIgLm1vZGFsLXdpbmRvd19fY29udGVudCB7XG4gIC13ZWJraXQtYm94LXBhY2s6IHN0YXJ0O1xuICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLm1vZGFsLXdpbmRvdy0tdHJhY2stY29uZmlndXJhdG9yIC5tb2RhbC13aW5kb3dfX2NvbnRhaW5lciB7XG4gICAgbWF4LXdpZHRoOiA2Ni42NjY2NjY2NjY3cmVtO1xuICB9XG59XG4ubW9kYWwtd2luZG93X19yb29tLXZpZXctaW1hZ2UtY29udGFpbmVyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4ubW9kYWwtd2luZG93X19yb29tLXZpZXctaW1hZ2Uge1xuICB3aWR0aDogLW1vei1maXQtY29udGVudDtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLWJsb2NrLW5vLWR1cGxpY2F0ZS1wcm9wZXJ0aWVzICovXG4gIHdpZHRoOiAtd2Via2l0LWZpdC1jb250ZW50O1xuICB3aWR0aDogZml0LWNvbnRlbnQ7XG59XG4ubW9kYWwtd2luZG93LS1yaW1sZXNzIC5tb2RhbC13aW5kb3dfX2NvbnRlbnQge1xuICBwYWRkaW5nOiAyLjVyZW0gMCAxLjVyZW07XG59XG4ubW9kYWwtd2luZG93LS1zYi1pbWFnZSAubW9kYWwtd2luZG93X19pbWFnZSB7XG4gIG1pbi13aWR0aDogMTAwJTtcbn1cbi5tb2RhbC13aW5kb3cgLnNlcnZpY2Utc2lkZWJhci1jb250ZW50IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4ubW9kYWwtd2luZG93LS1keW5hbWljLWNvbnRlbnQgLm1vZGFsLXdpbmRvd19fY29udGFpbmVyIHtcbiAgYm9yZGVyLXdpZHRoOiAzcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2ZlY2MwMDtcbiAgbWF4LXdpZHRoOiA1MS4ycmVtO1xuICBtYXgtaGVpZ2h0OiA5MCU7XG4gIGhlaWdodDogYXV0bztcbn1cbi5tb2RhbC13aW5kb3ctLWR5bmFtaWMtY29udGVudCAubW9kYWwtd2luZG93X19jb250ZW50ID4gLmNvbnRhaW5lciB7XG4gIG1hcmdpbjogMDtcbn1cbi5tb2RhbC13aW5kb3ctLWR5bmFtaWMtY29udGVudCAubmV3c2xldHRlci1lbGVtZW50IHtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuLm1vZGFsLXdpbmRvdy0tZHluYW1pYy1jb250ZW50IC5uZXdzbGV0dGVyLWVsZW1lbnRfX2ltYWdlLWNvbnRhaW5lciB7XG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiB1bnNldDtcbiAgICAgIGZsZXgtYmFzaXM6IHVuc2V0O1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ubmF2aWdhdGlvbi1kcm9wZG93bi1tZW51IHtcbiAgYm9yZGVyLXRvcC13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICNlY2VjZWM7XG59XG4ubmF2aWdhdGlvbi1kcm9wZG93bi1tZW51X19yaWdodC1zaWRlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIHBhZGRpbmctbGVmdDogMS41cmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAxLjVyZW07XG59XG4ubmF2aWdhdGlvbi1kcm9wZG93bi1tZW51X19yaWdodC1zaWRlIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4ubmF2aWdhdGlvbi1kcm9wZG93bi1tZW51X19sZWZ0LXNpZGUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5uYXZpZ2F0aW9uLWRyb3Bkb3duLW1lbnVfX2xlZnQtc2lkZSBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLm5hdmlnYXRpb24tZHJvcGRvd24tbWVudV9fcmVkdWNlZC1tZW51IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIHBhZGRpbmctbGVmdDogMS41cmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAxLjVyZW07XG59XG4ubmF2aWdhdGlvbi1kcm9wZG93bi1tZW51X19yZWR1Y2VkLW1lbnUgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi5uYXZpZ2F0aW9uLWRyb3Bkb3duLW1lbnVfX3JlZHVjZWQtbWVudSAubmF2aWdhdGlvbi1ub2RlLWl0ZW06bm90KDpmaXJzdC1jaGlsZCkge1xuICBtYXJnaW4tbGVmdDogMS41cmVtO1xufVxuLm5hdmlnYXRpb24tZHJvcGRvd24tbWVudV9fdGVhc2VyLWNvbnRhaW5lciB7XG4gIHBhZGRpbmctdG9wOiAxLjVyZW07XG4gIHBhZGRpbmctYm90dG9tOiAxLjVyZW07XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5uYXZpZ2F0aW9uLWRyb3Bkb3duLXN1Ym1lbnVfX2hlYWRsaW5lIHtcbiAgbGluZS1oZWlnaHQ6IDNyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbi5uYXZpZ2F0aW9uLWRyb3Bkb3duLXN1Ym1lbnVfX2hlYWRsaW5lIC5pY29uIHtcbiAgZm9udC1zaXplOiAxLjQ2NjY2NjY2NjdyZW07XG4gIG1hcmdpbi1yaWdodDogMC41cmVtO1xufVxuLm5hdmlnYXRpb24tZHJvcGRvd24tc3VibWVudV9fbm9kZS1pdGVtcyB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5uYXZpZ2F0aW9uLWRyb3Bkb3duLXN1Ym1lbnVfX3JvdyB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLm5hdmlnYXRpb24tZHJvcGRvd24tc3VibWVudV9fdGVhc2VyLWNvbnRhaW5lciB7XG4gIHBhZGRpbmctdG9wOiAxLjVyZW07XG4gIHBhZGRpbmctYm90dG9tOiAxLjVyZW07XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5hdmlnYXRpb24tZm9vdGVyIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIC1tcy1mbGV4LWZsb3c6IHdyYXA7XG4gICAgICAgIGZsZXgtZmxvdzogd3JhcDtcbiAgfVxufVxuLm5hdmlnYXRpb24tZm9vdGVyLmNvbnRhaW5lciB7XG4gIHBhZGRpbmc6IDA7XG59XG4ubmF2aWdhdGlvbi1mb290ZXJfX3F1YWxpdHkge1xuICBmb250LXdlaWdodDogNzAwO1xuICBwYWRkaW5nOiAwIDFyZW0gMCAxcmVtO1xufVxuLm5hdmlnYXRpb24tZm9vdGVyX19xdWFsaXR5LXRleHQge1xuICBmb250LXdlaWdodDogNDAwO1xuICBwYWRkaW5nLXRvcDogMC42NjY2NjY2NjY3cmVtO1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLm5hdmlnYXRpb24tZm9vdGVyX19xdWFsaXR5LXRleHQge1xuICAgIHBhZGRpbmctcmlnaHQ6IDEuMzMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLm5hdmlnYXRpb24tZm9vdGVyX19pbnRlcm5hdGlvbmFsIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBwYWRkaW5nOiAwIDAgMXJlbSAwO1xuICBmb250LXdlaWdodDogNzAwO1xufVxuLm5hdmlnYXRpb24tZm9vdGVyX19pbnRlcm5hdGlvbmFsLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG59XG4ubmF2aWdhdGlvbi1mb290ZXJfX2ludGVybmF0aW9uYWwtdGV4dCB7XG4gIGxpbmUtaGVpZ2h0OiAzcmVtO1xufVxuLm5hdmlnYXRpb24tZm9vdGVyX19pbnRlcm5hdGlvbmFsLWljb24ge1xuICBmb250LXNpemU6IDIuMzMzMzMzMzMzM3JlbTtcbn1cbi5uYXZpZ2F0aW9uLWZvb3Rlcl9fY29udGFjdC1pbmZvIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC13cmFwOiBub3dyYXA7XG4gICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIHBhZGRpbmc6IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZpZ2F0aW9uLWZvb3Rlcl9fY29udGFjdC1pbmZvIHtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG4ubmF2aWdhdGlvbi1mb290ZXJfX3NvY2lhbCB7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5hdmlnYXRpb24tZm9vdGVyX19zb2NpYWwge1xuICAgIHBhZGRpbmc6IDAgMXJlbSAxcmVtIDA7XG4gIH1cbn1cbi5uYXZpZ2F0aW9uLWZvb3Rlcl9fc29jaWFsLWljb25zIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgcGFkZGluZy10b3A6IDFyZW07XG4gIHdpZHRoOiAxMDAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLm5hdmlnYXRpb24tZm9vdGVyX19zb2NpYWwtaWNvbnMge1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIC13ZWJraXQtYm94LXBhY2s6IHN0YXJ0O1xuICAgICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbi5uYXZpZ2F0aW9uLWZvb3Rlcl9fc29jaWFsLWljb25zIC5pY29uLWJ1dHRvbiB7XG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAyNSU7XG4gICAgICBmbGV4LWJhc2lzOiAyNSU7XG4gIG1hcmdpbi1ib3R0b206IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uYXZpZ2F0aW9uLWZvb3Rlcl9fc29jaWFsLWljb25zIC5pY29uLWJ1dHRvbiB7XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XG4gICAgICAgIGZsZXgtYmFzaXM6IGF1dG87XG4gICAgbWFyZ2luOiAwIDAuNXJlbSAwLjVyZW0gMDtcbiAgfVxufVxuLm5hdmlnYXRpb24tZm9vdGVyX19zb2NpYWwtaWNvbnMgLmljb24tYnV0dG9uX19pY29uLWNvbnRhaW5lciB7XG4gIG1hcmdpbjogMDtcbn1cbi5uYXZpZ2F0aW9uLWZvb3Rlcl9fc29jaWFsLWljb25zLS1kZWZhdWx0IHtcbiAgd2lkdGg6IDEwMCU7XG59XG4ubmF2aWdhdGlvbi1mb290ZXJfX3NvY2lhbC1pY29ucy0tZGVmYXVsdCAuaWNvbi1idXR0b24ge1xuICBtYXJnaW46IDAgMC41cmVtIDAuNXJlbSAwO1xufVxuLm5hdmlnYXRpb24tZm9vdGVyIC5pY29uLS1mYWNlYm9vazpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzYjU5OTg7XG59XG4ubmF2aWdhdGlvbi1mb290ZXIgLmljb24tLWluc3RhZ3JhbTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlMTMwNmM7XG59XG4ubmF2aWdhdGlvbi1mb290ZXIgLmljb24tLWxpbmtlZGluOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNzdiNTtcbn1cbi5uYXZpZ2F0aW9uLWZvb3RlciAuaWNvbi0teW91dHViZTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjNDMwMmI7XG59XG4ubmF2aWdhdGlvbi1mb290ZXIgLmljb24tLXR3aXR0ZXI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBhY2VlO1xufVxuLm5hdmlnYXRpb24tZm9vdGVyIC5pY29uLS14aW5nOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzEyNjU2Nztcbn1cbi5uYXZpZ2F0aW9uLWZvb3RlciAuaWNvbi0tcGludGVyZXN0OmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M4MjMyYztcbn1cbi5uYXZpZ2F0aW9uLWZvb3RlciAuaWNvbi0td2hhdHNhcHA6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTI4YzdlO1xufVxuLm5hdmlnYXRpb24tZm9vdGVyIC5pY29uIHN2ZyB7XG4gIHdpZHRoOiAycmVtO1xuICBoZWlnaHQ6IDJyZW07XG4gIGZpbGw6ICNmZmY7XG59XG4ubmF2aWdhdGlvbi1mb290ZXIgLmljb24ubmF2aWdhdGlvbi1mb290ZXJfX2JyYW5kIHtcbiAgbWFyZ2luLXJpZ2h0OiA0cmVtO1xuICB3aWR0aDogNS42NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDUuMzMzMzMzMzMzM3JlbTtcbn1cbi5uYXZpZ2F0aW9uLWZvb3RlciAuaWNvbi5uYXZpZ2F0aW9uLWZvb3Rlcl9fYnJhbmQgc3ZnIHtcbiAgd2lkdGg6IHVuc2V0O1xuICBoZWlnaHQ6IHVuc2V0O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2aWdhdGlvbi1mb290ZXIgLmljb24ubmF2aWdhdGlvbi1mb290ZXJfX2JyYW5kIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLm5hdmlnYXRpb24tZm9vdGVyIC5pY29uLm5hdmlnYXRpb24tZm9vdGVyX19icmFuZCBzdmcge1xuICAgIHdpZHRoOiBpbmhlcml0O1xuICAgIGhlaWdodDogaW5oZXJpdDtcbiAgfVxufVxuLm5hdmlnYXRpb24tZm9vdGVyIGEge1xuICBjb2xvcjogI2ZmZjtcbn1cbi5uYXZpZ2F0aW9uLWZvb3RlciBhOmhvdmVyIHtcbiAgY29sb3I6ICNmZWNjMDA7XG59XG4ubmF2aWdhdGlvbi1mb290ZXIgLnRvZ2dsZXItYWNjb3JkaW9uX19pY29uIHtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgZm9udC1zaXplOiAxLjY2NjY2NjY2NjdyZW07XG59XG4ubmF2aWdhdGlvbi1mb290ZXIgLnRvZ2dsZXItYWNjb3JkaW9uX19pY29uIHN2ZyB7XG4gIHdpZHRoOiAxLjY2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMS42NjY2NjY2NjY3cmVtO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ubmF2aWdhdGlvbi1saXN0LW1vYmlsZS1pdGVtIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xuICB3aWR0aDogMTAwJTtcbiAgbGluZS1oZWlnaHQ6IDNyZW07XG4gIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbn1cbi5uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlLWl0ZW1fX2NhcmV0IHtcbiAgZGlzcGxheTogbm9uZTtcbiAgZm9udC1zaXplOiAxLjMzMzMzMzMzMzNyZW07XG59XG4ubmF2aWdhdGlvbi1saXN0LW1vYmlsZS1pdGVtX19jYXJldCBzdmcge1xuICB3aWR0aDogMS4zMzMzMzMzMzMzcmVtO1xuICBoZWlnaHQ6IDEuMzMzMzMzMzMzM3JlbTtcbn1cbi5uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlLWl0ZW1fX2NhcmV0LS1oYXMtY2FyZXQge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlLWl0ZW0tLXVwcGVyY2FzZSB7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG59XG4ubmF2aWdhdGlvbi1saXN0LW1vYmlsZS1pdGVtLS1zbHZ0ZWMge1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbn1cbi5uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlLWl0ZW0tLXRvcC1wYWRkaW5nIHtcbiAgcGFkZGluZy10b3A6IDEuNXJlbTtcbn1cbi5uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlLWl0ZW0tLXRyaWdnZXIge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4ubmF2aWdhdGlvbi1saXN0LW1vYmlsZS1pdGVtLS10cmlnZ2VyOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4ubmF2aWdhdGlvbi1saXN0LW1vYmlsZS1pdGVtLS10cmlnZ2VyOmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4ubmF2aWdhdGlvbi1saXN0LW1vYmlsZS1pdGVtLS1iZy1hbHQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGI0YjRkO1xuICBjb2xvcjogI2ZmZjtcbn1cbi5uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlLWl0ZW0tLWJnLWFsdCBzdmcge1xuICBmaWxsOiAjZmZmO1xufVxuLm5hdmlnYXRpb24tbGlzdC1tb2JpbGUtaXRlbS0taW50ZXJuYXRpb25hbGl6YXRpb24ge1xuICBib3JkZXItdG9wLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogIzZmNmY2ZjtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbn1cbi5uYXZpZ2F0aW9uLWxpc3QtbW9iaWxlLWl0ZW0tLWJvcmRlci1iIHtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICNkMGQwZDA7XG59XG4ubmF2aWdhdGlvbi1saXN0LW1vYmlsZS1pdGVtLS1ib3JkZXItYi13aGl0ZSB7XG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjZmZmO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ubmF2aWdhdGlvbi1ub2RlLWl0ZW0ge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDNyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAubmF2aWdhdGlvbi1ub2RlLWl0ZW0ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cbn1cbi5uYXZpZ2F0aW9uLW5vZGUtaXRlbV9fdHJpZ2dlci0td2l0aC1jYXJldC1jaGFyLWJlZm9yZSB7XG4gIHBhZGRpbmctbGVmdDogMS41cmVtO1xufVxuLm5hdmlnYXRpb24tbm9kZS1pdGVtX190cmlnZ2VyLS13aXRoLWNhcmV0LWNoYXItYmVmb3JlIC5uYXZpZ2F0aW9uLW5vZGUtaXRlbV9fbGluayxcbi5uYXZpZ2F0aW9uLW5vZGUtaXRlbV9fdHJpZ2dlci0td2l0aC1jYXJldC1jaGFyLWJlZm9yZSAubmF2aWdhdGlvbi1ub2RlLWl0ZW1fX3RleHQge1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbi5uYXZpZ2F0aW9uLW5vZGUtaXRlbV9fdHJpZ2dlci0td2l0aC1jYXJldC1jaGFyLWJlZm9yZSAubmF2aWdhdGlvbi1ub2RlLWl0ZW1fX2xpbms6OmJlZm9yZSxcbi5uYXZpZ2F0aW9uLW5vZGUtaXRlbV9fdHJpZ2dlci0td2l0aC1jYXJldC1jaGFyLWJlZm9yZSAubmF2aWdhdGlvbi1ub2RlLWl0ZW1fX3RleHQ6OmJlZm9yZSB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbiAgbGVmdDogMS41cmVtICFpbXBvcnRhbnQ7XG59XG4ubmF2aWdhdGlvbi1ub2RlLWl0ZW1fX3RyaWdnZXItLXNlbGVjdGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4ubmF2aWdhdGlvbi1ub2RlLWl0ZW1fX3RyaWdnZXItLXNlbGVjdGVkIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4ubmF2aWdhdGlvbi1ub2RlLWl0ZW1fX2xpbms6aG92ZXIsIC5uYXZpZ2F0aW9uLW5vZGUtaXRlbV9fbGluazpmb2N1cyB7XG4gIGNvbG9yOiAjOTI5MjkyO1xufVxuLm5hdmlnYXRpb24tbm9kZS1pdGVtX19saW5rLCAubmF2aWdhdGlvbi1ub2RlLWl0ZW1fX3RleHQge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZy1sZWZ0OiAxLjI1cmVtO1xufVxuLm5hdmlnYXRpb24tbm9kZS1pdGVtX190cmlnZ2VyOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4ubmF2aWdhdGlvbi1ub2RlLWl0ZW1fX3RyaWdnZXI6aG92ZXIgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi5uYXZpZ2F0aW9uLW5vZGUtaXRlbS0tYm9yZGVyLWIge1xuICBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbn1cbi5uYXZpZ2F0aW9uLW5vZGUtaXRlbS0tYm9yZGVyLWItd2hpdGUge1xuICBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2ZmZjtcbn1cbi5uYXZpZ2F0aW9uLW5vZGUtaXRlbS0td2l0aC1jYXJldC1jaGFyLWJlZm9yZSAubmF2aWdhdGlvbi1ub2RlLWl0ZW1fX2xpbms6OmJlZm9yZSxcbi5uYXZpZ2F0aW9uLW5vZGUtaXRlbS0td2l0aC1jYXJldC1jaGFyLWJlZm9yZSAubmF2aWdhdGlvbi1ub2RlLWl0ZW1fX3RleHQ6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiPlwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG59XG4ubmF2aWdhdGlvbi1ub2RlLWl0ZW0tLXVwcGVyY2FzZSB7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG59XG4ubmF2aWdhdGlvbi1ub2RlLWl0ZW0tLXgtcGFkZGluZy14eHhsIC5uYXZpZ2F0aW9uLW5vZGUtaXRlbV9fbGluayxcbi5uYXZpZ2F0aW9uLW5vZGUtaXRlbS0teC1wYWRkaW5nLXh4eGwgLm5hdmlnYXRpb24tbm9kZS1pdGVtX190ZXh0IHtcbiAgcGFkZGluZy1sZWZ0OiA1cmVtO1xuICBwYWRkaW5nLXJpZ2h0OiA1cmVtO1xufVxuLm5hdmlnYXRpb24tbm9kZS1pdGVtLS14LXBhZGRpbmcteHhsIC5uYXZpZ2F0aW9uLW5vZGUtaXRlbV9fbGluayxcbi5uYXZpZ2F0aW9uLW5vZGUtaXRlbS0teC1wYWRkaW5nLXh4bCAubmF2aWdhdGlvbi1ub2RlLWl0ZW1fX3RleHQge1xuICBwYWRkaW5nLWxlZnQ6IDRyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDRyZW07XG59XG4ubmF2aWdhdGlvbi1ub2RlLWl0ZW0tLXgtcGFkZGluZy14bCAubmF2aWdhdGlvbi1ub2RlLWl0ZW1fX2xpbmssXG4ubmF2aWdhdGlvbi1ub2RlLWl0ZW0tLXgtcGFkZGluZy14bCAubmF2aWdhdGlvbi1ub2RlLWl0ZW1fX3RleHQge1xuICBwYWRkaW5nLWxlZnQ6IDNyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDNyZW07XG59XG4ubmF2aWdhdGlvbi1ub2RlLWl0ZW0tLXgtcGFkZGluZy1sYXJnZSAubmF2aWdhdGlvbi1ub2RlLWl0ZW1fX2xpbmssXG4ubmF2aWdhdGlvbi1ub2RlLWl0ZW0tLXgtcGFkZGluZy1sYXJnZSAubmF2aWdhdGlvbi1ub2RlLWl0ZW1fX3RleHQge1xuICBwYWRkaW5nLWxlZnQ6IDIuNXJlbTtcbiAgcGFkZGluZy1yaWdodDogMi41cmVtO1xufVxuLm5hdmlnYXRpb24tbm9kZS1pdGVtLS14LXBhZGRpbmctYmlnZ2VzdCAubmF2aWdhdGlvbi1ub2RlLWl0ZW1fX2xpbmssXG4ubmF2aWdhdGlvbi1ub2RlLWl0ZW0tLXgtcGFkZGluZy1iaWdnZXN0IC5uYXZpZ2F0aW9uLW5vZGUtaXRlbV9fdGV4dCB7XG4gIHBhZGRpbmctbGVmdDogMnJlbTtcbiAgcGFkZGluZy1yaWdodDogMnJlbTtcbn1cbi5uYXZpZ2F0aW9uLW5vZGUtaXRlbS0teC1wYWRkaW5nLWJpZ2dlciAubmF2aWdhdGlvbi1ub2RlLWl0ZW1fX2xpbmssXG4ubmF2aWdhdGlvbi1ub2RlLWl0ZW0tLXgtcGFkZGluZy1iaWdnZXIgLm5hdmlnYXRpb24tbm9kZS1pdGVtX190ZXh0IHtcbiAgcGFkZGluZy1sZWZ0OiAxLjVyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDEuNXJlbTtcbn1cbi5uYXZpZ2F0aW9uLW5vZGUtaXRlbS0teC1wYWRkaW5nLWJpZyAubmF2aWdhdGlvbi1ub2RlLWl0ZW1fX2xpbmssXG4ubmF2aWdhdGlvbi1ub2RlLWl0ZW0tLXgtcGFkZGluZy1iaWcgLm5hdmlnYXRpb24tbm9kZS1pdGVtX190ZXh0IHtcbiAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xufVxuLm5hdmlnYXRpb24tbm9kZS1pdGVtLS14LXBhZGRpbmctbWVkaXVtIC5uYXZpZ2F0aW9uLW5vZGUtaXRlbV9fbGluayxcbi5uYXZpZ2F0aW9uLW5vZGUtaXRlbS0teC1wYWRkaW5nLW1lZGl1bSAubmF2aWdhdGlvbi1ub2RlLWl0ZW1fX3RleHQge1xuICBwYWRkaW5nLWxlZnQ6IDAuNzVyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDAuNzVyZW07XG59XG4ubmF2aWdhdGlvbi1ub2RlLWl0ZW0tLXgtcGFkZGluZy1tZWRpdW0tc21hbGwgLm5hdmlnYXRpb24tbm9kZS1pdGVtX19saW5rLFxuLm5hdmlnYXRpb24tbm9kZS1pdGVtLS14LXBhZGRpbmctbWVkaXVtLXNtYWxsIC5uYXZpZ2F0aW9uLW5vZGUtaXRlbV9fdGV4dCB7XG4gIHBhZGRpbmctbGVmdDogMC42M3JlbTtcbiAgcGFkZGluZy1yaWdodDogMC42M3JlbTtcbn1cbi5uYXZpZ2F0aW9uLW5vZGUtaXRlbS0teC1wYWRkaW5nLWRlZmF1bHQgLm5hdmlnYXRpb24tbm9kZS1pdGVtX19saW5rLFxuLm5hdmlnYXRpb24tbm9kZS1pdGVtLS14LXBhZGRpbmctZGVmYXVsdCAubmF2aWdhdGlvbi1ub2RlLWl0ZW1fX3RleHQge1xuICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcbiAgcGFkZGluZy1yaWdodDogMC41cmVtO1xufVxuLm5hdmlnYXRpb24tbm9kZS1pdGVtLS14LXBhZGRpbmctc21hbGwgLm5hdmlnYXRpb24tbm9kZS1pdGVtX19saW5rLFxuLm5hdmlnYXRpb24tbm9kZS1pdGVtLS14LXBhZGRpbmctc21hbGwgLm5hdmlnYXRpb24tbm9kZS1pdGVtX190ZXh0IHtcbiAgcGFkZGluZy1sZWZ0OiAwLjI1cmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtO1xufVxuLm5hdmlnYXRpb24tbm9kZS1pdGVtLS14LXBhZGRpbmctcmVzZXQgLm5hdmlnYXRpb24tbm9kZS1pdGVtX19saW5rLFxuLm5hdmlnYXRpb24tbm9kZS1pdGVtLS14LXBhZGRpbmctcmVzZXQgLm5hdmlnYXRpb24tbm9kZS1pdGVtX190ZXh0IHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xufVxuLm5hdmlnYXRpb24tbm9kZS1pdGVtLS14LXBhZGRpbmcgLm5hdmlnYXRpb24tbm9kZS1pdGVtX19saW5rLFxuLm5hdmlnYXRpb24tbm9kZS1pdGVtLS14LXBhZGRpbmcgLm5hdmlnYXRpb24tbm9kZS1pdGVtX190ZXh0IHtcbiAgcGFkZGluZzogMC43NXJlbSAxLjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG4ubmF2aWdhdGlvbi1ub2RlLWl0ZW0tLXRvcC1wYWRkaW5nIHtcbiAgcGFkZGluZy10b3A6IDEuNXJlbTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi5wYWdlLWluZm8ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBwYWRkaW5nOiAwLjY2NjY2NjY2NjdyZW0gMCAwLjhyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wYWdlLWluZm8ge1xuICAgIHBhZGRpbmctdG9wOiAwLjkzMzMzMzMzMzNyZW07XG4gIH1cbn1cbi5wYWdlLWluZm9fX2NvbnRhaW5lciB7XG4gIHBhZGRpbmc6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5wYWdlLWluZm9fX2NvbnRhaW5lciB7XG4gICAgcGFkZGluZzogMCAxcmVtO1xuICB9XG59XG4ucGFnZS1pbmZvLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciwgLnBhZ2UtaW5mby0tY2hlY2tvdXQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICBwYWRkaW5nOiAxcmVtIDA7XG4gIG1hcmdpbjogLTIuMTMzMzMzMzMzM3JlbSAwIDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogNDAwO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBzZWxlY3Rvci1uby1xdWFsaWZ5aW5nLXR5cGUgKi9cbiAgLyogc3R5bGVsaW50LWVuYWJsZSBzZWxlY3Rvci1uby1xdWFsaWZ5aW5nLXR5cGUgKi9cbn1cbi5wYWdlLWluZm8tLXByb2R1Y3QtY29uZmlndXJhdG9yIC5icmVhZGNydW1iLXN0ZXAsIC5wYWdlLWluZm8tLWNoZWNrb3V0IC5icmVhZGNydW1iLXN0ZXAge1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiAyNSU7XG59XG4ucGFnZS1pbmZvLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAuYnJlYWRjcnVtYi1zdGVwX19jaGVja2VkLCAucGFnZS1pbmZvLS1jaGVja291dCAuYnJlYWRjcnVtYi1zdGVwX19jaGVja2VkIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5wYWdlLWluZm8tLXByb2R1Y3QtY29uZmlndXJhdG9yIC5icmVhZGNydW1iLXN0ZXBfX251bWJlciwgLnBhZ2UtaW5mby0tY2hlY2tvdXQgLmJyZWFkY3J1bWItc3RlcF9fbnVtYmVyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5wYWdlLWluZm8tLXByb2R1Y3QtY29uZmlndXJhdG9yIC5icmVhZGNydW1iLXN0ZXBfX2xpbmssIC5wYWdlLWluZm8tLWNoZWNrb3V0IC5icmVhZGNydW1iLXN0ZXBfX2xpbmsge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwYWRkaW5nOiAwLjVyZW0gMCAwLjVyZW0gMS41cmVtO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBmb250LXNpemU6IDAuOHJlbTtcbiAgd29yZC1zcGFjaW5nOiA2cmVtO1xuICBsaW5lLWhlaWdodDogMC45cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAucGFnZS1pbmZvLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAuYnJlYWRjcnVtYi1zdGVwX19saW5rLCAucGFnZS1pbmZvLS1jaGVja291dCAuYnJlYWRjcnVtYi1zdGVwX19saW5rIHtcbiAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgICB3b3JkLXNwYWNpbmc6IGluaGVyaXQ7XG4gICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gIH1cbn1cbi5wYWdlLWluZm8tLXByb2R1Y3QtY29uZmlndXJhdG9yIC5icmVhZGNydW1iLXN0ZXBfX2xpbms6OmFmdGVyLCAucGFnZS1pbmZvLS1jaGVja291dCAuYnJlYWRjcnVtYi1zdGVwX19saW5rOjphZnRlciB7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICNlY2VjZWMgI2VjZWNlYyB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogLTAuOHJlbTtcbiAgdG9wOiAwLjRyZW07XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcbiAgd2lkdGg6IDIuMjY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAyLjI2NjY2NjY2NjdyZW07XG4gIHotaW5kZXg6IDE7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5wYWdlLWluZm8tLXByb2R1Y3QtY29uZmlndXJhdG9yIC5icmVhZGNydW1iLXN0ZXBfX2xpbms6OmFmdGVyLCAucGFnZS1pbmZvLS1jaGVja291dCAuYnJlYWRjcnVtYi1zdGVwX19saW5rOjphZnRlciB7XG4gICAgdG9wOiAwLjI2NjY2NjY2NjdyZW07XG4gICAgd2lkdGg6IDJyZW07XG4gICAgaGVpZ2h0OiAycmVtO1xuICB9XG59XG4ucGFnZS1pbmZvLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAuYnJlYWRjcnVtYi1zdGVwLS1jb21wbGV0ZSwgLnBhZ2UtaW5mby0tY2hlY2tvdXQgLmJyZWFkY3J1bWItc3RlcC0tY29tcGxldGUge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC42NjY2NjY2NjY3cmVtO1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC42NjY2NjY2NjY3cmVtO1xufVxuLnBhZ2UtaW5mby0tcHJvZHVjdC1jb25maWd1cmF0b3IgLmJyZWFkY3J1bWItc3RlcC0tY29tcGxldGUgLmJyZWFkY3J1bWItc3RlcF9fbGluaywgLnBhZ2UtaW5mby0tY2hlY2tvdXQgLmJyZWFkY3J1bWItc3RlcC0tY29tcGxldGUgLmJyZWFkY3J1bWItc3RlcF9fbGluayB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuNjY2NjY2NjY2N3JlbTtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMC42NjY2NjY2NjY3cmVtO1xufVxuLnBhZ2UtaW5mby0tcHJvZHVjdC1jb25maWd1cmF0b3IgLmJyZWFkY3J1bWItc3RlcC0tZGlzYWJsZWQgLmJyZWFkY3J1bWItc3RlcF9fbGluaywgLnBhZ2UtaW5mby0tY2hlY2tvdXQgLmJyZWFkY3J1bWItc3RlcC0tZGlzYWJsZWQgLmJyZWFkY3J1bWItc3RlcF9fbGluayB7XG4gIGJvcmRlci10b3Atd2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjZWNlY2VjO1xuICBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2VjZWNlYztcbn1cbi5wYWdlLWluZm8tLXByb2R1Y3QtY29uZmlndXJhdG9yIC5icmVhZGNydW1iLXN0ZXAtLWFjdGl2ZSwgLnBhZ2UtaW5mby0tY2hlY2tvdXQgLmJyZWFkY3J1bWItc3RlcC0tYWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZlY2MwMDtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGJvcmRlcjogbm9uZTtcbn1cbi5wYWdlLWluZm8tLXByb2R1Y3QtY29uZmlndXJhdG9yIC5icmVhZGNydW1iLXN0ZXAtLWFjdGl2ZSBzdmcsIC5wYWdlLWluZm8tLWNoZWNrb3V0IC5icmVhZGNydW1iLXN0ZXAtLWFjdGl2ZSBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLnBhZ2UtaW5mby0tcHJvZHVjdC1jb25maWd1cmF0b3IgLmJyZWFkY3J1bWItc3RlcC0tYWN0aXZlIC5icmVhZGNydW1iLXN0ZXBfX2xpbmssIC5wYWdlLWluZm8tLWNoZWNrb3V0IC5icmVhZGNydW1iLXN0ZXAtLWFjdGl2ZSAuYnJlYWRjcnVtYi1zdGVwX19saW5rIHtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGJvcmRlcjogbm9uZTtcbn1cbi5wYWdlLWluZm8tLXByb2R1Y3QtY29uZmlndXJhdG9yIC5icmVhZGNydW1iLXN0ZXAtLWFjdGl2ZSAuYnJlYWRjcnVtYi1zdGVwX19saW5rOjphZnRlciwgLnBhZ2UtaW5mby0tY2hlY2tvdXQgLmJyZWFkY3J1bWItc3RlcC0tYWN0aXZlIC5icmVhZGNydW1iLXN0ZXBfX2xpbms6OmFmdGVyIHtcbiAgYm9yZGVyLXdpZHRoOiAxLjU2NjY2NjY2NjdyZW07XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgI2ZlY2MwMDtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgd2lkdGg6IGF1dG87XG4gIGhlaWdodDogYXV0bztcbiAgdG9wOiAtMC4wNjY2NjY2NjY3cmVtO1xuICByaWdodDogLTNyZW07XG4gIHotaW5kZXg6IDIwMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnBhZ2UtaW5mby0tcHJvZHVjdC1jb25maWd1cmF0b3IgLmJyZWFkY3J1bWItc3RlcC0tYWN0aXZlIC5icmVhZGNydW1iLXN0ZXBfX2xpbms6OmFmdGVyLCAucGFnZS1pbmZvLS1jaGVja291dCAuYnJlYWRjcnVtYi1zdGVwLS1hY3RpdmUgLmJyZWFkY3J1bWItc3RlcF9fbGluazo6YWZ0ZXIge1xuICAgIGJvcmRlci13aWR0aDogMS4zMzMzMzMzMzMzcmVtO1xuICAgIHJpZ2h0OiAtMi42cmVtO1xuICB9XG59XG4ucGFnZS1pbmZvLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAuYnJlYWRjcnVtYi1zdGVwLS1hY3RpdmUgLmJyZWFkY3J1bWItc3RlcF9fbGluazo6YmVmb3JlLCAucGFnZS1pbmZvLS1jaGVja291dCAuYnJlYWRjcnVtYi1zdGVwLS1hY3RpdmUgLmJyZWFkY3J1bWItc3RlcF9fbGluazo6YmVmb3JlIHtcbiAgYm9yZGVyLXdpZHRoOiAxLjU2NjY2NjY2NjdyZW07XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgI2ZmZjtcbiAgY29udGVudDogXCJcIjtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICB0b3A6IC0wLjA2NjY2NjY2NjdyZW07XG4gIHJpZ2h0OiAtMi45MzMzMzMzMzMzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAucGFnZS1pbmZvLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAuYnJlYWRjcnVtYi1zdGVwLS1hY3RpdmUgLmJyZWFkY3J1bWItc3RlcF9fbGluazo6YmVmb3JlLCAucGFnZS1pbmZvLS1jaGVja291dCAuYnJlYWRjcnVtYi1zdGVwLS1hY3RpdmUgLmJyZWFkY3J1bWItc3RlcF9fbGluazo6YmVmb3JlIHtcbiAgICBib3JkZXItd2lkdGg6IDEuMzMzMzMzMzMzM3JlbTtcbiAgICByaWdodDogLTIuNTMzMzMzMzMzM3JlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnBhZ2UtaW5mby0tcHJvZHVjdC1jb25maWd1cmF0b3IgLmJyZWFkY3J1bWItc3RlcC0tYWN0aXZlIC5icmVhZGNydW1iLXN0ZXBfX2xpbms6OmJlZm9yZSwgLnBhZ2UtaW5mby0tY2hlY2tvdXQgLmJyZWFkY3J1bWItc3RlcC0tYWN0aXZlIC5icmVhZGNydW1iLXN0ZXBfX2xpbms6OmJlZm9yZSB7XG4gICAgYm9yZGVyLXdpZHRoOiAxLjU2NjY2NjY2NjdyZW07XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICNmZmY7XG4gICAgYm9yZGVyLXdpZHRoOiAxLjMzMzMzMzMzMzNyZW07XG4gICAgcmlnaHQ6IC0yLjUzMzMzMzMzMzNyZW07XG4gIH1cbn1cbi5wYWdlLWluZm8tLXByb2R1Y3QtY29uZmlndXJhdG9yIC5icmVhZGNydW1iLXN0ZXBfX2xpbms6bGFzdC1jaGlsZCwgLnBhZ2UtaW5mby0tY2hlY2tvdXQgLmJyZWFkY3J1bWItc3RlcF9fbGluazpsYXN0LWNoaWxkIHtcbiAgZm9udC1zaXplOiAwLjhyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5wYWdlLWluZm8tLXByb2R1Y3QtY29uZmlndXJhdG9yIC5icmVhZGNydW1iLXN0ZXBfX2xpbms6bGFzdC1jaGlsZCwgLnBhZ2UtaW5mby0tY2hlY2tvdXQgLmJyZWFkY3J1bWItc3RlcF9fbGluazpsYXN0LWNoaWxkIHtcbiAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgfVxufVxuLnBhZ2UtaW5mby0tcHJvZHVjdC1jb25maWd1cmF0b3IgLmJyZWFkY3J1bWItc3RlcF9faG9sZGVyLCAucGFnZS1pbmZvLS1jaGVja291dCAuYnJlYWRjcnVtYi1zdGVwX19ob2xkZXIge1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ucGFnZS1pbmZvLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAuYnJlYWRjcnVtYi1zdGVwX19ob2xkZXIgLmJyZWFkY3J1bWItc3RlcF9fbGluaywgLnBhZ2UtaW5mby0tY2hlY2tvdXQgLmJyZWFkY3J1bWItc3RlcF9faG9sZGVyIC5icmVhZGNydW1iLXN0ZXBfX2xpbmsge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgZm9udC1zaXplOiAwLjhyZW07XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLnBhZ2UtaW5mby0tcHJvZHVjdC1jb25maWd1cmF0b3IgLmJyZWFkY3J1bWItc3RlcF9faG9sZGVyIC5icmVhZGNydW1iLXN0ZXBfX2xpbmsgc3ZnLCAucGFnZS1pbmZvLS1jaGVja291dCAuYnJlYWRjcnVtYi1zdGVwX19ob2xkZXIgLmJyZWFkY3J1bWItc3RlcF9fbGluayBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAucGFnZS1pbmZvLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAuYnJlYWRjcnVtYi1zdGVwX19ob2xkZXIgLmJyZWFkY3J1bWItc3RlcF9fbGluaywgLnBhZ2UtaW5mby0tY2hlY2tvdXQgLmJyZWFkY3J1bWItc3RlcF9faG9sZGVyIC5icmVhZGNydW1iLXN0ZXBfX2xpbmsge1xuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICB9XG59XG4ucGFnZS1pbmZvLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAuYnJlYWRjcnVtYi1zdGVwX19ob2xkZXIgLmJyZWFkY3J1bWItc3RlcF9fbGluazo6YWZ0ZXIsIC5wYWdlLWluZm8tLWNoZWNrb3V0IC5icmVhZGNydW1iLXN0ZXBfX2hvbGRlciAuYnJlYWRjcnVtYi1zdGVwX19saW5rOjphZnRlciB7XG4gIGJvcmRlci13aWR0aDogMS41NnJlbTtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjZWNlY2VjO1xuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB3aWR0aDogYXV0bztcbiAgaGVpZ2h0OiBhdXRvO1xuICB0b3A6IC0wLjA2NjY2NjY2NjdyZW07XG4gIHJpZ2h0OiAtMi45MzMzMzMzMzMzcmVtO1xuICB6LWluZGV4OiAyMDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5wYWdlLWluZm8tLXByb2R1Y3QtY29uZmlndXJhdG9yIC5icmVhZGNydW1iLXN0ZXBfX2hvbGRlciAuYnJlYWRjcnVtYi1zdGVwX19saW5rOjphZnRlciwgLnBhZ2UtaW5mby0tY2hlY2tvdXQgLmJyZWFkY3J1bWItc3RlcF9faG9sZGVyIC5icmVhZGNydW1iLXN0ZXBfX2xpbms6OmFmdGVyIHtcbiAgICBib3JkZXItd2lkdGg6IDEuMzMzMzMzMzMzM3JlbTtcbiAgICByaWdodDogLTIuNTMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLnBhZ2UtaW5mby0tcHJvZHVjdC1jb25maWd1cmF0b3IgLmJyZWFkY3J1bWItc3RlcF9faG9sZGVyIC5icmVhZGNydW1iLXN0ZXBfX2xpbms6OmJlZm9yZSwgLnBhZ2UtaW5mby0tY2hlY2tvdXQgLmJyZWFkY3J1bWItc3RlcF9faG9sZGVyIC5icmVhZGNydW1iLXN0ZXBfX2xpbms6OmJlZm9yZSB7XG4gIGJvcmRlci13aWR0aDogMS41NjY2NjY2NjY3cmVtO1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICNmZmY7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgdG9wOiAtMC4wNjY2NjY2NjY3cmVtO1xuICByaWdodDogLTMuNXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnBhZ2UtaW5mby0tcHJvZHVjdC1jb25maWd1cmF0b3IgLmJyZWFkY3J1bWItc3RlcF9faG9sZGVyIC5icmVhZGNydW1iLXN0ZXBfX2xpbms6OmJlZm9yZSwgLnBhZ2UtaW5mby0tY2hlY2tvdXQgLmJyZWFkY3J1bWItc3RlcF9faG9sZGVyIC5icmVhZGNydW1iLXN0ZXBfX2xpbms6OmJlZm9yZSB7XG4gICAgYm9yZGVyLXdpZHRoOiAxLjMzMzMzMzMzMzNyZW07XG4gICAgcmlnaHQ6IC0yLjUzMzMzMzMzMzNyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyM3B4KSB7XG4gIC5wYWdlLWluZm8tLXByb2R1Y3QtY29uZmlndXJhdG9yIC5icmVhZGNydW1iLXN0ZXAtLWFjdGl2ZS5icmVhZGNydW1iLXN0ZXAtLXN0ZXAtMSAqOjpiZWZvcmUsIC5wYWdlLWluZm8tLXByb2R1Y3QtY29uZmlndXJhdG9yIC5icmVhZGNydW1iLXN0ZXAtLXByb2dyZXNzLWNvbXBsZXRlLmJyZWFkY3J1bWItc3RlcC0tc3RlcC0xICo6OmJlZm9yZSwgLnBhZ2UtaW5mby0tY2hlY2tvdXQgLmJyZWFkY3J1bWItc3RlcC0tYWN0aXZlLmJyZWFkY3J1bWItc3RlcC0tc3RlcC0xICo6OmJlZm9yZSwgLnBhZ2UtaW5mby0tY2hlY2tvdXQgLmJyZWFkY3J1bWItc3RlcC0tcHJvZ3Jlc3MtY29tcGxldGUuYnJlYWRjcnVtYi1zdGVwLS1zdGVwLTEgKjo6YmVmb3JlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4ucGFnZS1pbmZvLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAuYnJlYWRjcnVtYi1zdGVwOmxhc3QtY2hpbGQuYnJlYWRjcnVtYi1zdGVwX19saW5rLCAucGFnZS1pbmZvLS1jaGVja291dCAuYnJlYWRjcnVtYi1zdGVwOmxhc3QtY2hpbGQuYnJlYWRjcnVtYi1zdGVwX19saW5rIHtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG4ucGFnZS1pbmZvLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAuYnJlYWRjcnVtYi1zdGVwOmxhc3QtY2hpbGQuYnJlYWRjcnVtYi1zdGVwX19saW5rOmhvdmVyLCAucGFnZS1pbmZvLS1jaGVja291dCAuYnJlYWRjcnVtYi1zdGVwOmxhc3QtY2hpbGQuYnJlYWRjcnVtYi1zdGVwX19saW5rOmhvdmVyIHtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4ucGFnZS1pbmZvLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAuYnJlYWRjcnVtYi1zdGVwX19saW5rOmxhc3QtY2hpbGQ6aG92ZXIsIC5wYWdlLWluZm8tLWNoZWNrb3V0IC5icmVhZGNydW1iLXN0ZXBfX2xpbms6bGFzdC1jaGlsZDpob3ZlciB7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLnBhZ2UtaW5mby0tcHJvZHVjdC1jb25maWd1cmF0b3IgLmJyZWFkY3J1bWItc3RlcC0tcHJvZ3Jlc3Mtc3RlcDpsYXN0LWNoaWxkIC5icmVhZGNydW1iLXN0ZXBfX2xpbms6OmFmdGVyLCAucGFnZS1pbmZvLS1jaGVja291dCAuYnJlYWRjcnVtYi1zdGVwLS1wcm9ncmVzcy1zdGVwOmxhc3QtY2hpbGQgLmJyZWFkY3J1bWItc3RlcF9fbGluazo6YWZ0ZXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuLnBhZ2UtaW5mby0tcHJvZHVjdC1jb25maWd1cmF0b3IgLmJyZWFkY3J1bWItc3RlcC0tcHJvZ3Jlc3Mtc3RlcDpmaXJzdC1jaGlsZCAuYnJlYWRjcnVtYi1zdGVwX19saW5rOjpiZWZvcmUsIC5wYWdlLWluZm8tLWNoZWNrb3V0IC5icmVhZGNydW1iLXN0ZXAtLXByb2dyZXNzLXN0ZXA6Zmlyc3QtY2hpbGQgLmJyZWFkY3J1bWItc3RlcF9fbGluazo6YmVmb3JlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5wYWdlLWluZm8tLXByb2R1Y3QtY29uZmlndXJhdG9yIC5icmVhZGNydW1iLXN0ZXAtLXByb2dyZXNzLXN0ZXA6bm90KDpsYXN0LWNoaWxkKTo6YWZ0ZXIsIC5wYWdlLWluZm8tLXByb2R1Y3QtY29uZmlndXJhdG9yIC5icmVhZGNydW1iLXN0ZXAtLXByb2dyZXNzLWNvbXBsZXRlOm5vdCg6bGFzdC1jaGlsZCk6OmFmdGVyLCAucGFnZS1pbmZvLS1jaGVja291dCAuYnJlYWRjcnVtYi1zdGVwLS1wcm9ncmVzcy1zdGVwOm5vdCg6bGFzdC1jaGlsZCk6OmFmdGVyLCAucGFnZS1pbmZvLS1jaGVja291dCAuYnJlYWRjcnVtYi1zdGVwLS1wcm9ncmVzcy1jb21wbGV0ZTpub3QoOmxhc3QtY2hpbGQpOjphZnRlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ucGFnZS1pbmZvLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAuYnJlYWRjcnVtYi1zdGVwLS1wcm9ncmVzcy1jb21wbGV0ZTpsYXN0LWNoaWxkIC5icmVhZGNydW1iLXN0ZXBfX2xpbmssIC5wYWdlLWluZm8tLXByb2R1Y3QtY29uZmlndXJhdG9yIC5icmVhZGNydW1iLXN0ZXAtLWRpc2FibGVkOmxhc3QtY2hpbGQgLmJyZWFkY3J1bWItc3RlcF9fbGluaywgLnBhZ2UtaW5mby0tY2hlY2tvdXQgLmJyZWFkY3J1bWItc3RlcC0tcHJvZ3Jlc3MtY29tcGxldGU6bGFzdC1jaGlsZCAuYnJlYWRjcnVtYi1zdGVwX19saW5rLCAucGFnZS1pbmZvLS1jaGVja291dCAuYnJlYWRjcnVtYi1zdGVwLS1kaXNhYmxlZDpsYXN0LWNoaWxkIC5icmVhZGNydW1iLXN0ZXBfX2xpbmsge1xuICBib3JkZXItdG9wLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2VjZWNlYztcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICNlY2VjZWM7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5wYWdlLWluZm8tLXByb2R1Y3QtY29uZmlndXJhdG9yIC5icmVhZGNydW1iLXN0ZXAtLXByb2dyZXNzLWNvbXBsZXRlOmxhc3QtY2hpbGQgLmJyZWFkY3J1bWItc3RlcF9fbGluaywgLnBhZ2UtaW5mby0tcHJvZHVjdC1jb25maWd1cmF0b3IgLmJyZWFkY3J1bWItc3RlcC0tZGlzYWJsZWQ6bGFzdC1jaGlsZCAuYnJlYWRjcnVtYi1zdGVwX19saW5rLCAucGFnZS1pbmZvLS1jaGVja291dCAuYnJlYWRjcnVtYi1zdGVwLS1wcm9ncmVzcy1jb21wbGV0ZTpsYXN0LWNoaWxkIC5icmVhZGNydW1iLXN0ZXBfX2xpbmssIC5wYWdlLWluZm8tLWNoZWNrb3V0IC5icmVhZGNydW1iLXN0ZXAtLWRpc2FibGVkOmxhc3QtY2hpbGQgLmJyZWFkY3J1bWItc3RlcF9fbGluayB7XG4gICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAxcHg7XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItY29sb3I6ICNlY2VjZWM7XG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAuNjY2NjY2NjY2N3JlbTtcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC42NjY2NjY2NjY3cmVtO1xuICB9XG59XG4ucGFnZS1pbmZvLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAuYnJlYWRjcnVtYi1zdGVwLS1wcm9ncmVzcy1jb21wbGV0ZTpsYXN0LWNoaWxkIC5icmVhZGNydW1iLXN0ZXBfX2xpbms6OmFmdGVyLCAucGFnZS1pbmZvLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAuYnJlYWRjcnVtYi1zdGVwLS1kaXNhYmxlZDpsYXN0LWNoaWxkIC5icmVhZGNydW1iLXN0ZXBfX2xpbms6OmFmdGVyLCAucGFnZS1pbmZvLS1jaGVja291dCAuYnJlYWRjcnVtYi1zdGVwLS1wcm9ncmVzcy1jb21wbGV0ZTpsYXN0LWNoaWxkIC5icmVhZGNydW1iLXN0ZXBfX2xpbms6OmFmdGVyLCAucGFnZS1pbmZvLS1jaGVja291dCAuYnJlYWRjcnVtYi1zdGVwLS1kaXNhYmxlZDpsYXN0LWNoaWxkIC5icmVhZGNydW1iLXN0ZXBfX2xpbms6OmFmdGVyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5wYWdlLWluZm8tLXByb2R1Y3QtY29uZmlndXJhdG9yIC5icmVhZGNydW1iLS1wcm9ncmVzcywgLnBhZ2UtaW5mby0tY2hlY2tvdXQgLmJyZWFkY3J1bWItLXByb2dyZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIHBhZGRpbmc6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHotaW5kZXg6IDYwMDtcbn1cbi5wYWdlLWluZm8tLXByb2R1Y3QtY29uZmlndXJhdG9yIC5icmVhZGNydW1iLS1wcm9ncmVzcyBzdmcsIC5wYWdlLWluZm8tLWNoZWNrb3V0IC5icmVhZGNydW1iLS1wcm9ncmVzcyBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAucGFnZS1pbmZvLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAuYnJlYWRjcnVtYi0tcHJvZ3Jlc3MsIC5wYWdlLWluZm8tLWNoZWNrb3V0IC5icmVhZGNydW1iLS1wcm9ncmVzcyB7XG4gICAgYm9yZGVyLXJhZGl1czogMC42NjY2NjY2NjY3cmVtO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgY29sb3I6ICM0YjRiNGQ7XG4gIH1cbiAgLnBhZ2UtaW5mby0tcHJvZHVjdC1jb25maWd1cmF0b3IgLmJyZWFkY3J1bWItLXByb2dyZXNzIHN2ZywgLnBhZ2UtaW5mby0tY2hlY2tvdXQgLmJyZWFkY3J1bWItLXByb2dyZXNzIHN2ZyB7XG4gICAgZmlsbDogIzRiNGI0ZDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAucGFnZS1pbmZvLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciBsaS5icmVhZGNydW1iLXN0ZXA6bGFzdC1vZi10eXBlLCAucGFnZS1pbmZvLS1jaGVja291dCBsaS5icmVhZGNydW1iLXN0ZXA6bGFzdC1vZi10eXBlIHtcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC42NjY2NjY2NjY3cmVtO1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjY2NjY2NjY2NjdyZW07XG4gIH1cbiAgLnBhZ2UtaW5mby0tcHJvZHVjdC1jb25maWd1cmF0b3IgbGkuYnJlYWRjcnVtYi1zdGVwOmxhc3Qtb2YtdHlwZSAuYnJlYWRjcnVtYi1zdGVwX19saW5rLCAucGFnZS1pbmZvLS1jaGVja291dCBsaS5icmVhZGNydW1iLXN0ZXA6bGFzdC1vZi10eXBlIC5icmVhZGNydW1iLXN0ZXBfX2xpbmsge1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwLjY2NjY2NjY2NjdyZW07XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAuNjY2NjY2NjY2N3JlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAucGFnZS1pbmZvLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciBsaS5icmVhZGNydW1iLXN0ZXA6Zmlyc3Qtb2YtdHlwZSwgLnBhZ2UtaW5mby0tY2hlY2tvdXQgbGkuYnJlYWRjcnVtYi1zdGVwOmZpcnN0LW9mLXR5cGUge1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAuNjY2NjY2NjY2N3JlbTtcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjY2NjY2NjY2NjdyZW07XG4gIH1cbiAgLnBhZ2UtaW5mby0tcHJvZHVjdC1jb25maWd1cmF0b3IgbGkuYnJlYWRjcnVtYi1zdGVwOmZpcnN0LW9mLXR5cGUgLmJyZWFkY3J1bWItc3RlcF9fbGluaywgLnBhZ2UtaW5mby0tY2hlY2tvdXQgbGkuYnJlYWRjcnVtYi1zdGVwOmZpcnN0LW9mLXR5cGUgLmJyZWFkY3J1bWItc3RlcF9fbGluayB7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMC42NjY2NjY2NjY3cmVtO1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuNjY2NjY2NjY2N3JlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAucGFnZS1pbmZvLS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAuYnJlYWRjcnVtYi1zdGVwLS1tb2JpbGUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTQ5cHgpIHtcbiAgLnBhZ2UtaW5mby0tcHJvZHVjdC1jb25maWd1cmF0b3IgLmJyZWFkY3J1bWItc3RlcC0tZGVza3RvcCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLnBhZ2UtaW5mbyAuYnJlYWRjcnVtYi1zdGVwLWNhcnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnBhZ2UtaW5mbyAuYnJlYWRjcnVtYi1zdGVwLWNhcnQge1xuICAgIHdpZHRoOiA1JTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbiAgLnBhZ2UtaW5mbyAuYnJlYWRjcnVtYi1zdGVwLWNhcnQgLmJyZWFkY3J1bWItc3RlcC1jYXJ0X19jYXJ0LWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7XG4gICAgY29sb3I6ICM0YjRiNGQ7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB6LWluZGV4OiAxMDA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5wYWdlLWluZm8gLmJyZWFkY3J1bWItc3RlcC1jYXJ0IC5icmVhZGNydW1iLXN0ZXAtY2FydF9fY2FydC1jb250YWluZXIgc3ZnIHtcbiAgICBmaWxsOiAjNGI0YjRkO1xuICB9XG4gIC5wYWdlLWluZm8gLmJyZWFkY3J1bWItc3RlcC1jYXJ0IC5icmVhZGNydW1iLXN0ZXBfX2NhcnQ6aG92ZXIge1xuICAgIGNvbG9yOiAjZmVjYzAwO1xuICB9XG4gIC5wYWdlLWluZm8gLmJyZWFkY3J1bWItc3RlcC1jYXJ0IC5icmVhZGNydW1iLXN0ZXBfX2NhcnQ6OmJlZm9yZSB7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgZm9udC1zaXplOiAxLjdyZW07XG4gIH1cbiAgLnBhZ2UtaW5mbyAuYnJlYWRjcnVtYi1zdGVwLWNhcnQgLmJyZWFkY3J1bWItc3RlcF9fY2FydDo6YWZ0ZXIge1xuICAgIGJvcmRlci13aWR0aDogMS4zMzMzMzMzMzMzcmVtO1xuICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjZWNlY2VjO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGhlaWdodDogYXV0bztcbiAgICB0b3A6IC0wLjA2NjY2NjY2NjdyZW07XG4gICAgcmlnaHQ6IC0yLjUzMzMzMzMzMzNyZW07XG4gICAgei1pbmRleDogMjAwO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxufVxuLnBhZ2UtaW5mb19fdGl0bGUge1xuICBwYWRkaW5nLXRvcDogMC4yNjY2NjY2NjY3cmVtO1xuICBmb250OiA3MDAgMS40NjY2NjY2NjY3cmVtLzEuNzMzMzMzMzMzM3JlbSBcIkxhdG9cIiwgc2Fucy1zZXJpZjtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5wYWdlLWluZm9fX3RpdGxlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgICBmb250LXNpemU6IDEuODY2NjY2NjY2N3JlbTtcbiAgICBsaW5lLWhlaWdodDogMi40cmVtO1xuICB9XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5wYW5lbC1pbmZvLWl0ZW0ge1xuICBkaXNwbGF5OiBub25lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnBhbmVsLWluZm8taXRlbSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiAwLjczMzMzMzMzMzNyZW07XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBsaW5lLWhlaWdodDogMi42NjY2NjY2NjY3cmVtO1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICB9XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5wcml2YWN5LW5hdmlnYXRpb24ge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LWFsaWduOiBlbmQ7XG4gICAgICAtbXMtZmxleC1hbGlnbjogZW5kO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBwYWRkaW5nLXRvcDogMC42NjY2NjY2NjY3cmVtO1xuICAtd2Via2l0LWJveC1vcmRpbmFsLWdyb3VwOiAzO1xuICAgICAgLW1zLWZsZXgtb3JkZXI6IDI7XG4gICAgICAgICAgb3JkZXI6IDI7XG4gIHdpZHRoOiAxMDAlO1xufVxuLnByaXZhY3ktbmF2aWdhdGlvbl9faXRlbSB7XG4gIHBhZGRpbmc6IDAgMC41MzMzMzMzMzMzcmVtO1xuICBtYXJnaW4tYm90dG9tOiAxLjMzMzMzMzMzMzNyZW07XG4gIGNvbG9yOiAjNGI0YjRkO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbi5wcml2YWN5LW5hdmlnYXRpb25fX2l0ZW06bm90KDpmaXJzdC1jaGlsZCkge1xuICBwYWRkaW5nLXRvcDogNXB4O1xufVxuLnByaXZhY3ktbmF2aWdhdGlvbl9fYm9yZGVyIHtcbiAgYm9yZGVyLXJpZ2h0OiAwLjA2NjY2NjY2NjdyZW0gc29saWQgIzRiNGI0ZDtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcml2YWN5LW5hdmlnYXRpb24ge1xuICAgIC13ZWJraXQtYm94LXBhY2s6IHJpZ2h0O1xuICAgICAgICAtbXMtZmxleC1wYWNrOiByaWdodDtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogcmlnaHQ7XG4gICAgd2lkdGg6IHVuc2V0O1xuICAgIHBhZGRpbmctdG9wOiAwO1xuICB9XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5wcm9kdWN0LWJveCB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgaGVpZ2h0OiBhdXRvO1xuICBwYWRkaW5nOiAwIDAuNXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wcm9kdWN0LWJveCB7XG4gICAgbWF4LXdpZHRoOiAxOC42NjY2NjY2NjY3cmVtO1xuICB9XG59XG4ucHJvZHVjdC1ib3hfX2NvbnRhaW5lciB7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICNkMGQwZDA7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbi5wcm9kdWN0LWJveF9fY29udGFpbmVyLS1zbHZ0ZWMge1xuICBib3JkZXItY29sb3I6ICMwMWEzZWM7XG59XG4ucHJvZHVjdC1ib3hfX2dvLXRvIHtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG59XG4ucHJvZHVjdC1ib3hfX2dvLXRvLS13aXRoLXByaWNlIHtcbiAgbWFyZ2luLWxlZnQ6IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAucHJvZHVjdC1ib3hfX2dvLXRvIGEge1xuICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICB9XG59XG4ucHJvZHVjdC1ib3hfX2luZm8ge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDEwcHggMjBweCAwcHg7XG4gIHBhZGRpbmc6IDAuNjY2NjY2NjY2N3JlbSAxLjMzMzMzMzMzMzNyZW0gMHJlbTtcbiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XG4gICAgICBmbGV4LWJhc2lzOiBhdXRvO1xufVxuLnByb2R1Y3QtYm94X190aXRsZSB7XG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG59XG4ucHJvZHVjdC1ib3hfX2Rlc2NyaXB0aW9uLCAucHJvZHVjdC1ib3hfX3NrdSB7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xufVxuLnByb2R1Y3QtYm94X19lbmVyZ3ktc2t1IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcGFkZGluZzogMHB4IDIwcHg7XG4gIHBhZGRpbmc6IDByZW0gMS4zMzMzMzMzMzMzcmVtO1xuICBtYXJnaW4tdG9wOiBhdXRvO1xufVxuLnByb2R1Y3QtYm94IC5lbmVyZ3ktbGFiZWwge1xuICAtbXMtZmxleC1pdGVtLWFsaWduOiBjZW50ZXI7XG4gICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gIG1pbi1oZWlnaHQ6IDJyZW07XG59XG4ucHJvZHVjdC1ib3ggLmVuZXJneS1sYWJlbCBzdmcge1xuICB3aWR0aDogMnJlbTtcbiAgaGVpZ2h0OiAycmVtO1xufVxuLnByb2R1Y3QtYm94X19za3Uge1xuICAtbXMtd29yZC1icmVhazogYnJlYWstYWxsO1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWNsYXJhdGlvbi1ibG9jay1uby1kdXBsaWNhdGUtcHJvcGVydGllcyAqL1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAtbXMtaHlwaGVuczogYXV0bztcbiAgICAgIGh5cGhlbnM6IGF1dG87XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBtYXJnaW46IDA7XG59XG4ucHJvZHVjdC1ib3hfX3ZhcmlhbnQtYnV0dG9uIHtcbiAgcGFkZGluZzogMTBweCAyMHB4IDBweDtcbiAgcGFkZGluZzogMC42NjY2NjY2NjY3cmVtIDEuMzMzMzMzMzMzM3JlbSAwcmVtO1xuICBtaW4taGVpZ2h0OiAzLjMzMzMzMzMzMzNyZW07XG59XG4ucHJvZHVjdC1ib3hfX2F2YWlsYWJpbGl0eSB7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcGFkZGluZzogMTBweCAyMHB4IDBweDtcbiAgcGFkZGluZzogMC42NjY2NjY2NjY3cmVtIDEuMzMzMzMzMzMzM3JlbSAwcmVtO1xuICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xufVxuLnByb2R1Y3QtYm94X19hdmFpbGFiaWxpdHkgLmF2YWlsYWJpbGl0eV9fZG90cyB7XG4gIHdpZHRoOiBhdXRvO1xufVxuLnByb2R1Y3QtYm94X19hdmFpbGFiaWxpdHkgLmF2YWlsYWJpbGl0eV9fbGFiZWwge1xuICBtYXJnaW4tbGVmdDogNy41cHg7XG4gIG1hcmdpbi1sZWZ0OiAwLjVyZW07XG59XG4ucHJvZHVjdC1ib3hfX2F2YWlsYWJpbGl0eSAuYXZhaWxhYmlsaXR5X19sYWJlbC0tc21hbGwge1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW4tbGVmdDogMDtcbn1cbi5wcm9kdWN0LWJveF9fYWN0aW9ucy1jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAxMHB4IDIwcHggMTBweDtcbiAgcGFkZGluZzogMC42NjY2NjY2NjY3cmVtIDEuMzMzMzMzMzMzM3JlbSAwLjY2NjY2NjY2NjdyZW07XG4gIHdpZHRoOiAxMDAlO1xufVxuLnByb2R1Y3QtYm94X19hY3Rpb25zLWNvbnRhaW5lci0tbm8tcHJpY2Uge1xuICAtbXMtZmxleC1pdGVtLWFsaWduOiBlbmQ7XG4gICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDtcbn1cbi5wcm9kdWN0LWJveF9fYWN0aW9ucy1jb250YWluZXItLWJ1eWFibGUge1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLnByb2R1Y3QtYm94X19hY3Rpb25zLWNvbnRhaW5lciAuaWNvbi1idXR0b24ge1xuICBtYXJnaW46IDAgMCAwIDAuNjY2NjY2NjY2N3JlbTtcbn1cbi5wcm9kdWN0LWJveF9fYWRkLXRvLWNhcnQge1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VsZWN0b3ItY2xhc3MtcGF0dGVybiAqL1xufVxuLnByb2R1Y3QtYm94X19hZGQtdG8tY2FydCAuanMtcHJvZHVjdC1ib3hfX2Zvcm0ge1xuICBoZWlnaHQ6IDNyZW07XG59XG4ucHJvZHVjdC1ib3hfX2FkZC10by1jYXJ0IC5xdWFudGl0eS1pbnB1dC1zZWxlY3Qge1xuICB3aWR0aDogNHJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtYm94X19hZGQtdG8tY2FydCAucXVhbnRpdHktaW5wdXQtc2VsZWN0IHtcbiAgICB3aWR0aDogMy4zMzMzMzMzMzMzcmVtO1xuICB9XG59XG4ucHJvZHVjdC1ib3hfX2FkZC10by1jYXJ0IC5xdWFudGl0eS1pbnB1dC1zZWxlY3QgLmlucHV0IHtcbiAgcGFkZGluZzogMC45MzMzMzMzMzMzcmVtIDAuNXJlbTtcbn1cbi5wcm9kdWN0LWJveF9fYWRkLXRvLWNhcnQgLnF1YW50aXR5LWlucHV0LXNlbGVjdF9fc2VsZWN0IHtcbiAgcGFkZGluZzogMDtcbn1cbi5wcm9kdWN0LWJveF9fYWRkLXRvLWNhcnQgLnF1YW50aXR5LWlucHV0LXNlbGVjdCAuc2VsZWN0X19jYXJldCB7XG4gIHJpZ2h0OiAwLjI1cmVtO1xufVxuLnByb2R1Y3QtYm94X19hZGQtdG8tY2FydCAuYnV0dG9uIHtcbiAgcGFkZGluZzogMC44cmVtIDAuNjY2NjY2NjY2N3JlbTtcbn1cbi5wcm9kdWN0LWJveF9fcHJpY2Uge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cbi5wcm9kdWN0LWJveF9fcHJpY2UgLnByaWNlX19hbW91bnQge1xuICBmb250LXNpemU6IDEuMnJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgbWFyZ2luLXJpZ2h0OiAwO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4ucHJvZHVjdC1ib3hfX3ByaWNlIC5wcmljZV9fYW1vdW50LWxhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4ucHJvZHVjdC1ib3hfX3ByaWNlIC5wcmljZV9fYW1vdW50LS1hbHQge1xuICBtYXJnaW4tdG9wOiBhdXRvO1xufVxuLnByb2R1Y3QtYm94X19wcmljZS5wcmljZS0tc2FsZSB7XG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0YXJ0O1xuICAgICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcbiAgbWluLWhlaWdodDogM3JlbTtcbn1cbi5wcm9kdWN0LWJveF9faW1hZ2Utd3JhcCB7XG4gIGhlaWdodDogMjc1cHg7XG4gIGhlaWdodDogMTguMzMzMzMzMzMzM3JlbTtcbiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XG4gICAgICBmbGV4LWJhc2lzOiBhdXRvO1xufVxuLnByb2R1Y3QtYm94X19pbWFnZS13cmFwIC50aHVtYm5haWwge1xuICBoZWlnaHQ6IDEwMCU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5wcm9kdWN0LWJveF9faW1hZ2Utd3JhcCAudGh1bWJuYWlsX19pbWFnZSB7XG4gIGhlaWdodDogMjc1cHg7XG4gIGhlaWdodDogMTguMzMzMzMzMzMzM3JlbTtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4ucHJvZHVjdC1ib3gtLWNhdGFsb2csIC5wcm9kdWN0LWJveC0tY2F0ZWdvcnkge1xuICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU0OXB4KSB7XG4gIC5wcm9kdWN0LWJveC0tY2F0YWxvZzpsYXN0LWNoaWxkLCAucHJvZHVjdC1ib3gtLWNhdGVnb3J5Omxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cbi5wcm9kdWN0LWJveCAuc2xpY2stY2Fyb3VzZWwge1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ucHJvZHVjdC1ib3ggLnNsaWNrLWNhcm91c2VsX19jb250YWluZXIsXG4ucHJvZHVjdC1ib3ggLnNsaWNrLWNhcm91c2VsIC5zbGljay1saXN0LFxuLnByb2R1Y3QtYm94IC5zbGljay1jYXJvdXNlbCAuc2xpY2stdHJhY2ssXG4ucHJvZHVjdC1ib3ggLnNsaWNrLWNhcm91c2VsIC5zbGljay1zbGlkZSB7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5wcm9kdWN0LWJveCAuc2xpY2stY2Fyb3VzZWwgLnNsaWNrLXNsaWRlIHtcbiAgbWFyZ2luOiAwIDFyZW07XG59XG4ucHJvZHVjdC1ib3ggLnNsaWNrLWNhcm91c2VsIC5uYXYtYXJyb3cge1xuICBib3JkZXItcmFkaXVzOiAwO1xuICB3aWR0aDogNjBweDtcbiAgd2lkdGg6IDRyZW07XG4gIGhlaWdodDogNjBweDtcbiAgaGVpZ2h0OiA0cmVtO1xuICB0b3A6IHVuc2V0O1xuICBib3R0b206IC0xcmVtO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIG9wYWNpdHk6IDE7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbiAgbGluZS1oZWlnaHQ6IDAuNTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1ib3ggLnNsaWNrLWNhcm91c2VsIC5uYXYtYXJyb3cge1xuICAgIGJvdHRvbTogLTJyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wcm9kdWN0LWJveCAuc2xpY2stY2Fyb3VzZWwgLm5hdi1hcnJvdyB7XG4gICAgZm9udC1zaXplOiAycmVtO1xuICAgIHdpZHRoOiAzMHB4O1xuICAgIHdpZHRoOiAycmVtO1xuICAgIGhlaWdodDogMzBweDtcbiAgICBoZWlnaHQ6IDJyZW07XG4gICAgYm90dG9tOiAtMXJlbTtcbiAgfVxufVxuLnByb2R1Y3QtYm94IC5zbGljay1jYXJvdXNlbCAubmF2LWFycm93LS1wcmV2IHtcbiAgbGVmdDogMDtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAucHJvZHVjdC1ib3ggLnNsaWNrLWNhcm91c2VsIC5uYXYtYXJyb3ctLXByZXYge1xuICAgIGxlZnQ6IDFyZW07XG4gIH1cbn1cbi5wcm9kdWN0LWJveCAuc2xpY2stY2Fyb3VzZWwgLm5hdi1hcnJvdy0tbmV4dCB7XG4gIHJpZ2h0OiAwO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wcm9kdWN0LWJveCAuc2xpY2stY2Fyb3VzZWwgLm5hdi1hcnJvdy0tbmV4dCB7XG4gICAgcmlnaHQ6IDFyZW07XG4gIH1cbn1cbi5wcm9kdWN0LWJveCAuc2xpY2stY2Fyb3VzZWwgLmljb24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMzMuMzMzMzMzMzMzMyU7XG59XG4ucHJvZHVjdC1ib3gtLWNtcyAucHJvZHVjdC1ib3hfX2ltYWdlLXdyYXAge1xuICBoZWlnaHQ6IDIzMHB4O1xuICBoZWlnaHQ6IDE1LjMzMzMzMzMzMzNyZW07XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIC8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbi5wcm9kdWN0LWJveC0tY21zIC5wcm9kdWN0LWJveF9faW1hZ2Utd3JhcCAudGh1bWJuYWlsX19pbWFnZSB7XG4gIGhlaWdodDogMjMwcHg7XG4gIGhlaWdodDogMTUuMzMzMzMzMzMzM3JlbTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnByb2R1Y3QtYm94IHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBoZWlnaHQ6IGF1dG87XG4gIHBhZGRpbmc6IDAgMC41cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnByb2R1Y3QtYm94IHtcbiAgICBtYXgtd2lkdGg6IDE4LjY2NjY2NjY2NjdyZW07XG4gIH1cbn1cbi5wcm9kdWN0LWJveF9fY29udGFpbmVyIHtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGhlaWdodDogMTAwJTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuLnByb2R1Y3QtYm94X19jb250YWluZXItLXNsdnRlYyB7XG4gIGJvcmRlci1jb2xvcjogIzAxYTNlYztcbn1cbi5wcm9kdWN0LWJveF9fZ28tdG8ge1xuICBtYXJnaW4tbGVmdDogYXV0bztcbn1cbi5wcm9kdWN0LWJveF9fZ28tdG8tLXdpdGgtcHJpY2Uge1xuICBtYXJnaW4tbGVmdDogMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wcm9kdWN0LWJveF9fZ28tdG8gYSB7XG4gICAgZm9udC1zaXplOiAwLjhyZW07XG4gIH1cbn1cbi5wcm9kdWN0LWJveF9faW5mbyB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZzogMTBweCAyMHB4IDBweDtcbiAgcGFkZGluZzogMC42NjY2NjY2NjY3cmVtIDEuMzMzMzMzMzMzM3JlbSAwcmVtO1xuICAtbXMtZmxleC1uZWdhdGl2ZTogMDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0bztcbiAgICAgIGZsZXgtYmFzaXM6IGF1dG87XG59XG4ucHJvZHVjdC1ib3hfX3RpdGxlIHtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbn1cbi5wcm9kdWN0LWJveF9fZGVzY3JpcHRpb24sIC5wcm9kdWN0LWJveF9fc2t1IHtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG59XG4ucHJvZHVjdC1ib3hfX2VuZXJneS1za3Uge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwYWRkaW5nOiAwcHggMjBweDtcbiAgcGFkZGluZzogMHJlbSAxLjMzMzMzMzMzMzNyZW07XG4gIG1hcmdpbi10b3A6IGF1dG87XG59XG4ucHJvZHVjdC1ib3ggLmVuZXJneS1sYWJlbCB7XG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGNlbnRlcjtcbiAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgbWluLWhlaWdodDogMnJlbTtcbn1cbi5wcm9kdWN0LWJveCAuZW5lcmd5LWxhYmVsIHN2ZyB7XG4gIHdpZHRoOiAycmVtO1xuICBoZWlnaHQ6IDJyZW07XG59XG4ucHJvZHVjdC1ib3hfX3NrdSB7XG4gIC1tcy13b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLWJsb2NrLW5vLWR1cGxpY2F0ZS1wcm9wZXJ0aWVzICovXG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIC1tcy1oeXBoZW5zOiBhdXRvO1xuICAgICAgaHlwaGVuczogYXV0bztcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIG1hcmdpbjogMDtcbn1cbi5wcm9kdWN0LWJveF9fdmFyaWFudC1idXR0b24ge1xuICBwYWRkaW5nOiAxMHB4IDIwcHggMHB4O1xuICBwYWRkaW5nOiAwLjY2NjY2NjY2NjdyZW0gMS4zMzMzMzMzMzMzcmVtIDByZW07XG4gIG1pbi1oZWlnaHQ6IDMuMzMzMzMzMzMzM3JlbTtcbn1cbi5wcm9kdWN0LWJveF9fYXZhaWxhYmlsaXR5IHtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nOiAxMHB4IDIwcHggMHB4O1xuICBwYWRkaW5nOiAwLjY2NjY2NjY2NjdyZW0gMS4zMzMzMzMzMzMzcmVtIDByZW07XG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG59XG4ucHJvZHVjdC1ib3hfX2F2YWlsYWJpbGl0eSAuYXZhaWxhYmlsaXR5X19kb3RzIHtcbiAgd2lkdGg6IGF1dG87XG59XG4ucHJvZHVjdC1ib3hfX2F2YWlsYWJpbGl0eSAuYXZhaWxhYmlsaXR5X19sYWJlbCB7XG4gIG1hcmdpbi1sZWZ0OiA3LjVweDtcbiAgbWFyZ2luLWxlZnQ6IDAuNXJlbTtcbn1cbi5wcm9kdWN0LWJveF9fYXZhaWxhYmlsaXR5IC5hdmFpbGFiaWxpdHlfX2xhYmVsLS1zbWFsbCB7XG4gIHdpZHRoOiAxMDAlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLnByb2R1Y3QtYm94X19hY3Rpb25zLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDEwcHggMjBweCAxMHB4O1xuICBwYWRkaW5nOiAwLjY2NjY2NjY2NjdyZW0gMS4zMzMzMzMzMzMzcmVtIDAuNjY2NjY2NjY2N3JlbTtcbiAgd2lkdGg6IDEwMCU7XG59XG4ucHJvZHVjdC1ib3hfX2FjdGlvbnMtY29udGFpbmVyLS1uby1wcmljZSB7XG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGVuZDtcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kO1xufVxuLnByb2R1Y3QtYm94X19hY3Rpb25zLWNvbnRhaW5lci0tYnV5YWJsZSB7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ucHJvZHVjdC1ib3hfX2FjdGlvbnMtY29udGFpbmVyIC5pY29uLWJ1dHRvbiB7XG4gIG1hcmdpbjogMCAwIDAgMC42NjY2NjY2NjY3cmVtO1xufVxuLnByb2R1Y3QtYm94X19hZGQtdG8tY2FydCB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWxlY3Rvci1jbGFzcy1wYXR0ZXJuICovXG59XG4ucHJvZHVjdC1ib3hfX2FkZC10by1jYXJ0IC5qcy1wcm9kdWN0LWJveF9fZm9ybSB7XG4gIGhlaWdodDogM3JlbTtcbn1cbi5wcm9kdWN0LWJveF9fYWRkLXRvLWNhcnQgLnF1YW50aXR5LWlucHV0LXNlbGVjdCB7XG4gIHdpZHRoOiA0cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1ib3hfX2FkZC10by1jYXJ0IC5xdWFudGl0eS1pbnB1dC1zZWxlY3Qge1xuICAgIHdpZHRoOiAzLjMzMzMzMzMzMzNyZW07XG4gIH1cbn1cbi5wcm9kdWN0LWJveF9fYWRkLXRvLWNhcnQgLnF1YW50aXR5LWlucHV0LXNlbGVjdCAuaW5wdXQge1xuICBwYWRkaW5nOiAwLjkzMzMzMzMzMzNyZW0gMC41cmVtO1xufVxuLnByb2R1Y3QtYm94X19hZGQtdG8tY2FydCAucXVhbnRpdHktaW5wdXQtc2VsZWN0X19zZWxlY3Qge1xuICBwYWRkaW5nOiAwO1xufVxuLnByb2R1Y3QtYm94X19hZGQtdG8tY2FydCAucXVhbnRpdHktaW5wdXQtc2VsZWN0IC5zZWxlY3RfX2NhcmV0IHtcbiAgcmlnaHQ6IDAuMjVyZW07XG59XG4ucHJvZHVjdC1ib3hfX2FkZC10by1jYXJ0IC5idXR0b24ge1xuICBwYWRkaW5nOiAwLjhyZW0gMC42NjY2NjY2NjY3cmVtO1xufVxuLnByb2R1Y3QtYm94X19wcmljZSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuLnByb2R1Y3QtYm94X19wcmljZSAucHJpY2VfX2Ftb3VudCB7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xuICBsaW5lLWhlaWdodDogMS4yO1xuICBtYXJnaW4tcmlnaHQ6IDA7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIC8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbi5wcm9kdWN0LWJveF9fcHJpY2UgLnByaWNlX19hbW91bnQtbGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5wcm9kdWN0LWJveF9fcHJpY2UgLnByaWNlX19hbW91bnQtLWFsdCB7XG4gIG1hcmdpbi10b3A6IGF1dG87XG59XG4ucHJvZHVjdC1ib3hfX3ByaWNlLnByaWNlLS1zYWxlIHtcbiAgLW1zLWZsZXgtaXRlbS1hbGlnbjogc3RhcnQ7XG4gICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xuICBtaW4taGVpZ2h0OiAzcmVtO1xufVxuLnByb2R1Y3QtYm94X19pbWFnZS13cmFwIHtcbiAgaGVpZ2h0OiAyNzVweDtcbiAgaGVpZ2h0OiAxOC4zMzMzMzMzMzMzcmVtO1xuICAtbXMtZmxleC1uZWdhdGl2ZTogMDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0bztcbiAgICAgIGZsZXgtYmFzaXM6IGF1dG87XG59XG4ucHJvZHVjdC1ib3hfX2ltYWdlLXdyYXAgLnRodW1ibmFpbCB7XG4gIGhlaWdodDogMTAwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLnByb2R1Y3QtYm94X19pbWFnZS13cmFwIC50aHVtYm5haWxfX2ltYWdlIHtcbiAgaGVpZ2h0OiAyNzVweDtcbiAgaGVpZ2h0OiAxOC4zMzMzMzMzMzMzcmVtO1xuICBtYXJnaW46IDAgYXV0bztcbn1cbi5wcm9kdWN0LWJveC0tY2F0YWxvZywgLnByb2R1Y3QtYm94LS1jYXRlZ29yeSB7XG4gIG1hcmdpbi1ib3R0b206IDEuNXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTQ5cHgpIHtcbiAgLnByb2R1Y3QtYm94LS1jYXRhbG9nOmxhc3QtY2hpbGQsIC5wcm9kdWN0LWJveC0tY2F0ZWdvcnk6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuLnByb2R1Y3QtYm94IC5zbGljay1jYXJvdXNlbCB7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5wcm9kdWN0LWJveCAuc2xpY2stY2Fyb3VzZWxfX2NvbnRhaW5lcixcbi5wcm9kdWN0LWJveCAuc2xpY2stY2Fyb3VzZWwgLnNsaWNrLWxpc3QsXG4ucHJvZHVjdC1ib3ggLnNsaWNrLWNhcm91c2VsIC5zbGljay10cmFjayxcbi5wcm9kdWN0LWJveCAuc2xpY2stY2Fyb3VzZWwgLnNsaWNrLXNsaWRlIHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLnByb2R1Y3QtYm94IC5zbGljay1jYXJvdXNlbCAuc2xpY2stc2xpZGUge1xuICBtYXJnaW46IDAgMXJlbTtcbn1cbi5wcm9kdWN0LWJveCAuc2xpY2stY2Fyb3VzZWwgLm5hdi1hcnJvdyB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiA2MHB4O1xuICB3aWR0aDogNHJlbTtcbiAgaGVpZ2h0OiA2MHB4O1xuICBoZWlnaHQ6IDRyZW07XG4gIHRvcDogdW5zZXQ7XG4gIGJvdHRvbTogLTFyZW07XG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcbiAgb3BhY2l0eTogMTtcbiAgZm9udC1zaXplOiAycmVtO1xuICBsaW5lLWhlaWdodDogMC41O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWJveCAuc2xpY2stY2Fyb3VzZWwgLm5hdi1hcnJvdyB7XG4gICAgYm90dG9tOiAtMnJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnByb2R1Y3QtYm94IC5zbGljay1jYXJvdXNlbCAubmF2LWFycm93IHtcbiAgICBmb250LXNpemU6IDJyZW07XG4gICAgd2lkdGg6IDMwcHg7XG4gICAgd2lkdGg6IDJyZW07XG4gICAgaGVpZ2h0OiAzMHB4O1xuICAgIGhlaWdodDogMnJlbTtcbiAgICBib3R0b206IC0xcmVtO1xuICB9XG59XG4ucHJvZHVjdC1ib3ggLnNsaWNrLWNhcm91c2VsIC5uYXYtYXJyb3ctLXByZXYge1xuICBsZWZ0OiAwO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wcm9kdWN0LWJveCAuc2xpY2stY2Fyb3VzZWwgLm5hdi1hcnJvdy0tcHJldiB7XG4gICAgbGVmdDogMXJlbTtcbiAgfVxufVxuLnByb2R1Y3QtYm94IC5zbGljay1jYXJvdXNlbCAubmF2LWFycm93LS1uZXh0IHtcbiAgcmlnaHQ6IDA7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnByb2R1Y3QtYm94IC5zbGljay1jYXJvdXNlbCAubmF2LWFycm93LS1uZXh0IHtcbiAgICByaWdodDogMXJlbTtcbiAgfVxufVxuLnByb2R1Y3QtYm94IC5zbGljay1jYXJvdXNlbCAuaWNvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAzMy4zMzMzMzMzMzMzJTtcbn1cbi5wcm9kdWN0LWJveC0tY21zIC5wcm9kdWN0LWJveF9faW1hZ2Utd3JhcCB7XG4gIGhlaWdodDogMjMwcHg7XG4gIGhlaWdodDogMTUuMzMzMzMzMzMzM3JlbTtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLnByb2R1Y3QtYm94LS1jbXMgLnByb2R1Y3QtYm94X19pbWFnZS13cmFwIC50aHVtYm5haWxfX2ltYWdlIHtcbiAgaGVpZ2h0OiAyMzBweDtcbiAgaGVpZ2h0OiAxNS4zMzMzMzMzMzMzcmVtO1xufVxuXG4ucHJvZHVjdC1ib3gtZG93bmxvYWRzIHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBoZWlnaHQ6IGF1dG87XG4gIHBhZGRpbmc6IDAgMC41cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnByb2R1Y3QtYm94LWRvd25sb2FkcyB7XG4gICAgbWF4LXdpZHRoOiAxOC42NjY2NjY2NjY3cmVtO1xuICB9XG59XG4ucHJvZHVjdC1ib3gtZG93bmxvYWRzX19jb250YWluZXIge1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG4ucHJvZHVjdC1ib3gtZG93bmxvYWRzX19jb250YWluZXItLXNsdnRlYyB7XG4gIGJvcmRlci1jb2xvcjogIzAxYTNlYztcbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHNfX2dvLXRvIHtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG59XG4ucHJvZHVjdC1ib3gtZG93bmxvYWRzX19nby10by0td2l0aC1wcmljZSB7XG4gIG1hcmdpbi1sZWZ0OiAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnByb2R1Y3QtYm94LWRvd25sb2Fkc19fZ28tdG8gYSB7XG4gICAgZm9udC1zaXplOiAwLjhyZW07XG4gIH1cbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHNfX2luZm8ge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDEwcHggMjBweCAwcHg7XG4gIHBhZGRpbmc6IDAuNjY2NjY2NjY2N3JlbSAxLjMzMzMzMzMzMzNyZW0gMHJlbTtcbiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XG4gICAgICBmbGV4LWJhc2lzOiBhdXRvO1xufVxuLnByb2R1Y3QtYm94LWRvd25sb2Fkc19fdGl0bGUge1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xufVxuLnByb2R1Y3QtYm94LWRvd25sb2Fkc19fZGVzY3JpcHRpb24sIC5wcm9kdWN0LWJveC1kb3dubG9hZHNfX3NrdSB7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xufVxuLnByb2R1Y3QtYm94LWRvd25sb2Fkc19fZW5lcmd5LXNrdSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBhZGRpbmc6IDBweCAyMHB4O1xuICBwYWRkaW5nOiAwcmVtIDEuMzMzMzMzMzMzM3JlbTtcbiAgbWFyZ2luLXRvcDogYXV0bztcbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHMgLmVuZXJneS1sYWJlbCB7XG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGNlbnRlcjtcbiAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgbWluLWhlaWdodDogMnJlbTtcbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHMgLmVuZXJneS1sYWJlbCBzdmcge1xuICB3aWR0aDogMnJlbTtcbiAgaGVpZ2h0OiAycmVtO1xufVxuLnByb2R1Y3QtYm94LWRvd25sb2Fkc19fc2t1IHtcbiAgLW1zLXdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVjbGFyYXRpb24tYmxvY2stbm8tZHVwbGljYXRlLXByb3BlcnRpZXMgKi9cbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgLW1zLWh5cGhlbnM6IGF1dG87XG4gICAgICBoeXBoZW5zOiBhdXRvO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgbWFyZ2luOiAwO1xufVxuLnByb2R1Y3QtYm94LWRvd25sb2Fkc19fdmFyaWFudC1idXR0b24ge1xuICBwYWRkaW5nOiAxMHB4IDIwcHggMHB4O1xuICBwYWRkaW5nOiAwLjY2NjY2NjY2NjdyZW0gMS4zMzMzMzMzMzMzcmVtIDByZW07XG4gIG1pbi1oZWlnaHQ6IDMuMzMzMzMzMzMzM3JlbTtcbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHNfX2F2YWlsYWJpbGl0eSB7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcGFkZGluZzogMTBweCAyMHB4IDBweDtcbiAgcGFkZGluZzogMC42NjY2NjY2NjY3cmVtIDEuMzMzMzMzMzMzM3JlbSAwcmVtO1xuICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xufVxuLnByb2R1Y3QtYm94LWRvd25sb2Fkc19fYXZhaWxhYmlsaXR5IC5hdmFpbGFiaWxpdHlfX2RvdHMge1xuICB3aWR0aDogYXV0bztcbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHNfX2F2YWlsYWJpbGl0eSAuYXZhaWxhYmlsaXR5X19sYWJlbCB7XG4gIG1hcmdpbi1sZWZ0OiA3LjVweDtcbiAgbWFyZ2luLWxlZnQ6IDAuNXJlbTtcbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHNfX2F2YWlsYWJpbGl0eSAuYXZhaWxhYmlsaXR5X19sYWJlbC0tc21hbGwge1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW4tbGVmdDogMDtcbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHNfX2FjdGlvbnMtY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAtbXMtZmxleC13cmFwOiBub3dyYXA7XG4gICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogMTBweCAyMHB4IDEwcHg7XG4gIHBhZGRpbmc6IDAuNjY2NjY2NjY2N3JlbSAxLjMzMzMzMzMzMzNyZW0gMC42NjY2NjY2NjY3cmVtO1xuICB3aWR0aDogMTAwJTtcbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHNfX2FjdGlvbnMtY29udGFpbmVyLS1uby1wcmljZSB7XG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGVuZDtcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kO1xufVxuLnByb2R1Y3QtYm94LWRvd25sb2Fkc19fYWN0aW9ucy1jb250YWluZXItLWJ1eWFibGUge1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLnByb2R1Y3QtYm94LWRvd25sb2Fkc19fYWN0aW9ucy1jb250YWluZXIgLmljb24tYnV0dG9uIHtcbiAgbWFyZ2luOiAwIDAgMCAwLjY2NjY2NjY2NjdyZW07XG59XG4ucHJvZHVjdC1ib3gtZG93bmxvYWRzX19hZGQtdG8tY2FydCB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWxlY3Rvci1jbGFzcy1wYXR0ZXJuICovXG59XG4ucHJvZHVjdC1ib3gtZG93bmxvYWRzX19hZGQtdG8tY2FydCAuanMtcHJvZHVjdC1ib3hfX2Zvcm0ge1xuICBoZWlnaHQ6IDNyZW07XG59XG4ucHJvZHVjdC1ib3gtZG93bmxvYWRzX19hZGQtdG8tY2FydCAucXVhbnRpdHktaW5wdXQtc2VsZWN0IHtcbiAgd2lkdGg6IDRyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWJveC1kb3dubG9hZHNfX2FkZC10by1jYXJ0IC5xdWFudGl0eS1pbnB1dC1zZWxlY3Qge1xuICAgIHdpZHRoOiAzLjMzMzMzMzMzMzNyZW07XG4gIH1cbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHNfX2FkZC10by1jYXJ0IC5xdWFudGl0eS1pbnB1dC1zZWxlY3QgLmlucHV0IHtcbiAgcGFkZGluZzogMC45MzMzMzMzMzMzcmVtIDAuNXJlbTtcbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHNfX2FkZC10by1jYXJ0IC5xdWFudGl0eS1pbnB1dC1zZWxlY3RfX3NlbGVjdCB7XG4gIHBhZGRpbmc6IDA7XG59XG4ucHJvZHVjdC1ib3gtZG93bmxvYWRzX19hZGQtdG8tY2FydCAucXVhbnRpdHktaW5wdXQtc2VsZWN0IC5zZWxlY3RfX2NhcmV0IHtcbiAgcmlnaHQ6IDAuMjVyZW07XG59XG4ucHJvZHVjdC1ib3gtZG93bmxvYWRzX19hZGQtdG8tY2FydCAuYnV0dG9uIHtcbiAgcGFkZGluZzogMC44cmVtIDAuNjY2NjY2NjY2N3JlbTtcbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHNfX3ByaWNlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG4ucHJvZHVjdC1ib3gtZG93bmxvYWRzX19wcmljZSAucHJpY2VfX2Ftb3VudCB7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xuICBsaW5lLWhlaWdodDogMS4yO1xuICBtYXJnaW4tcmlnaHQ6IDA7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIC8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHNfX3ByaWNlIC5wcmljZV9fYW1vdW50LWxhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4ucHJvZHVjdC1ib3gtZG93bmxvYWRzX19wcmljZSAucHJpY2VfX2Ftb3VudC0tYWx0IHtcbiAgbWFyZ2luLXRvcDogYXV0bztcbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHNfX3ByaWNlLnByaWNlLS1zYWxlIHtcbiAgLW1zLWZsZXgtaXRlbS1hbGlnbjogc3RhcnQ7XG4gICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xuICBtaW4taGVpZ2h0OiAzcmVtO1xufVxuLnByb2R1Y3QtYm94LWRvd25sb2Fkc19faW1hZ2Utd3JhcCB7XG4gIGhlaWdodDogMjc1cHg7XG4gIGhlaWdodDogMTguMzMzMzMzMzMzM3JlbTtcbiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XG4gICAgICBmbGV4LWJhc2lzOiBhdXRvO1xufVxuLnByb2R1Y3QtYm94LWRvd25sb2Fkc19faW1hZ2Utd3JhcCAudGh1bWJuYWlsIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4ucHJvZHVjdC1ib3gtZG93bmxvYWRzX19pbWFnZS13cmFwIC50aHVtYm5haWxfX2ltYWdlIHtcbiAgaGVpZ2h0OiAyNzVweDtcbiAgaGVpZ2h0OiAxOC4zMzMzMzMzMzMzcmVtO1xuICBtYXJnaW46IDAgYXV0bztcbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHMtLWNhdGFsb2csIC5wcm9kdWN0LWJveC1kb3dubG9hZHMtLWNhdGVnb3J5IHtcbiAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1NDlweCkge1xuICAucHJvZHVjdC1ib3gtZG93bmxvYWRzLS1jYXRhbG9nOmxhc3QtY2hpbGQsIC5wcm9kdWN0LWJveC1kb3dubG9hZHMtLWNhdGVnb3J5Omxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHMgLnNsaWNrLWNhcm91c2VsIHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLnByb2R1Y3QtYm94LWRvd25sb2FkcyAuc2xpY2stY2Fyb3VzZWxfX2NvbnRhaW5lcixcbi5wcm9kdWN0LWJveC1kb3dubG9hZHMgLnNsaWNrLWNhcm91c2VsIC5zbGljay1saXN0LFxuLnByb2R1Y3QtYm94LWRvd25sb2FkcyAuc2xpY2stY2Fyb3VzZWwgLnNsaWNrLXRyYWNrLFxuLnByb2R1Y3QtYm94LWRvd25sb2FkcyAuc2xpY2stY2Fyb3VzZWwgLnNsaWNrLXNsaWRlIHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLnByb2R1Y3QtYm94LWRvd25sb2FkcyAuc2xpY2stY2Fyb3VzZWwgLnNsaWNrLXNsaWRlIHtcbiAgbWFyZ2luOiAwIDFyZW07XG59XG4ucHJvZHVjdC1ib3gtZG93bmxvYWRzIC5zbGljay1jYXJvdXNlbCAubmF2LWFycm93IHtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgd2lkdGg6IDYwcHg7XG4gIHdpZHRoOiA0cmVtO1xuICBoZWlnaHQ6IDYwcHg7XG4gIGhlaWdodDogNHJlbTtcbiAgdG9wOiB1bnNldDtcbiAgYm90dG9tOiAtMXJlbTtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICBvcGFjaXR5OiAxO1xuICBmb250LXNpemU6IDJyZW07XG4gIGxpbmUtaGVpZ2h0OiAwLjU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtYm94LWRvd25sb2FkcyAuc2xpY2stY2Fyb3VzZWwgLm5hdi1hcnJvdyB7XG4gICAgYm90dG9tOiAtMnJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnByb2R1Y3QtYm94LWRvd25sb2FkcyAuc2xpY2stY2Fyb3VzZWwgLm5hdi1hcnJvdyB7XG4gICAgZm9udC1zaXplOiAycmVtO1xuICAgIHdpZHRoOiAzMHB4O1xuICAgIHdpZHRoOiAycmVtO1xuICAgIGhlaWdodDogMzBweDtcbiAgICBoZWlnaHQ6IDJyZW07XG4gICAgYm90dG9tOiAtMXJlbTtcbiAgfVxufVxuLnByb2R1Y3QtYm94LWRvd25sb2FkcyAuc2xpY2stY2Fyb3VzZWwgLm5hdi1hcnJvdy0tcHJldiB7XG4gIGxlZnQ6IDA7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnByb2R1Y3QtYm94LWRvd25sb2FkcyAuc2xpY2stY2Fyb3VzZWwgLm5hdi1hcnJvdy0tcHJldiB7XG4gICAgbGVmdDogMXJlbTtcbiAgfVxufVxuLnByb2R1Y3QtYm94LWRvd25sb2FkcyAuc2xpY2stY2Fyb3VzZWwgLm5hdi1hcnJvdy0tbmV4dCB7XG4gIHJpZ2h0OiAwO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wcm9kdWN0LWJveC1kb3dubG9hZHMgLnNsaWNrLWNhcm91c2VsIC5uYXYtYXJyb3ctLW5leHQge1xuICAgIHJpZ2h0OiAxcmVtO1xuICB9XG59XG4ucHJvZHVjdC1ib3gtZG93bmxvYWRzIC5zbGljay1jYXJvdXNlbCAuaWNvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAzMy4zMzMzMzMzMzMzJTtcbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHMtLWNtcyAucHJvZHVjdC1ib3gtZG93bmxvYWRzX19pbWFnZS13cmFwIHtcbiAgaGVpZ2h0OiAyMzBweDtcbiAgaGVpZ2h0OiAxNS4zMzMzMzMzMzMzcmVtO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4ucHJvZHVjdC1ib3gtZG93bmxvYWRzLS1jbXMgLnByb2R1Y3QtYm94LWRvd25sb2Fkc19faW1hZ2Utd3JhcCAudGh1bWJuYWlsX19pbWFnZSB7XG4gIGhlaWdodDogMjMwcHg7XG4gIGhlaWdodDogMTUuMzMzMzMzMzMzM3JlbTtcbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHNfX3ZhcmlhbnQtYnV0dG9uIHtcbiAgcGFkZGluZzogMjBweDtcbiAgcGFkZGluZzogMS4zMzMzMzMzMzMzcmVtO1xufVxuLnByb2R1Y3QtYm94LWRvd25sb2Fkc19fZW5lcmd5LXNrdSB7XG4gIG1hcmdpbi10b3A6IHVuc2V0O1xufVxuLnByb2R1Y3QtYm94LWRvd25sb2Fkc19fZG93bmxvYWQtbGlzdCB7XG4gIHBhZGRpbmc6IDBweCAyMHB4O1xuICBwYWRkaW5nOiAwcmVtIDEuMzMzMzMzMzMzM3JlbTtcbiAgbWFyZ2luLWJvdHRvbTogYXV0bztcbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHMgLmRvd25sb2FkLWRyb3Bkb3duIC5kb3dubG9hZC1zZWxlY3RfX2NvbnRhaW5lciB7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLSAzcmVtKTtcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAzcmVtKTtcbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHMgLmRvd25sb2FkLWRyb3Bkb3duIC5kb3dubG9hZC1zZWxlY3RfX2NvbnRhaW5lciAuY3VzdG9tLXNlbGVjdF9fc2VsZWN0LFxuLnByb2R1Y3QtYm94LWRvd25sb2FkcyAuZG93bmxvYWQtZHJvcGRvd24gLmRvd25sb2FkLXNlbGVjdF9fY29udGFpbmVyIC5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWQge1xuICBib3JkZXItcmFkaXVzOiAwLjY2NjY2NjY2NjdyZW0gMCAwIDAuNjY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAzcmVtO1xufVxuLnByb2R1Y3QtYm94LWRvd25sb2FkcyAuZG93bmxvYWQtZHJvcGRvd24gLmRvd25sb2FkLXNlbGVjdF9fY29udGFpbmVyIC5jdXN0b20tc2VsZWN0IHtcbiAgd2lkdGg6IDEwMCU7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLnByb2R1Y3QtYm94LWRvd25sb2FkcyAuZG93bmxvYWQtZHJvcGRvd24gLmRvd25sb2FkLXNlbGVjdF9fY29udGFpbmVyIC5jdXN0b20tc2VsZWN0X19zZWxlY3Qge1xuICB3aWR0aDogMTAwJTtcbn1cbi5wcm9kdWN0LWJveC1kb3dubG9hZHMgLmRvd25sb2FkLWRyb3Bkb3duIC5pY29uIHtcbiAgYm9yZGVyLXJhZGl1czogMCAwLjY2NjY2NjY2NjdyZW0gMC42NjY2NjY2NjY3cmVtIDA7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5wcm9kdWN0LWl0ZW0tYXR0cmlidXRlc19fY29sb3Ige1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAwLjkzMzMzMzMzMzNyZW07XG4gIGhlaWdodDogMC45MzMzMzMzMzMzcmVtO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIG1hcmdpbi1sZWZ0OiAwLjI2NjY2NjY2NjdyZW07XG4gIHRleHQtaW5kZW50OiAtOTk5OXB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucHJvZHVjdC1pdGVtLWJhc2Uge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxLjMzMzMzMzMzMzNyZW07XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICNkMGQwZDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtaXRlbS1iYXNlIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IDEuMzMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLnByb2R1Y3QtaXRlbS1iYXNlX19kZXRhaWxzLWJ1dHRvbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDAgMXJlbSAxcmVtO1xufVxuLnByb2R1Y3QtaXRlbS1iYXNlX19wb3NpdGlvbiB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwYWRkaW5nOiAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjlweCkge1xuICAucHJvZHVjdC1pdGVtLWJhc2VfX3Bvc2l0aW9uIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gICAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAtbXMtZmxleC13cmFwOiBub3dyYXA7XG4gICAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICB9XG59XG4ucHJvZHVjdC1pdGVtLWJhc2VfX3Byb2R1Y3QtaW5mbyB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICAtbXMtZmxleC1uZWdhdGl2ZTogNDtcbiAgICAgIGZsZXgtc2hyaW5rOiA0O1xufVxuLnByb2R1Y3QtaXRlbS1iYXNlX19wb3NpdGlvbi1pbmZvLCAucHJvZHVjdC1pdGVtLWJhc2VfX3ByaWNlLWF2YWlsYWJpbGl0eSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAtd2Via2l0LWJveC1hbGlnbjogZW5kO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGVuZDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OXB4KSB7XG4gIC5wcm9kdWN0LWl0ZW0tYmFzZV9fcHJpY2UtYXZhaWxhYmlsaXR5IHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMXJlbTtcbiAgfVxufVxuLnByb2R1Y3QtaXRlbS1iYXNlX19wb3NpdGlvbi1pbmZvIHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAzMCU7XG4gICAgICBmbGV4LWJhc2lzOiAzMCU7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcbiAgICAgICAgICBmbGV4LWdyb3c6IDE7XG59XG4ucHJvZHVjdC1pdGVtLWJhc2VfX3Bvc2l0aW9uLWluZm8tLWR5bmFtaWMge1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0bztcbiAgICAgIGZsZXgtYmFzaXM6IGF1dG87XG59XG4ucHJvZHVjdC1pdGVtLWJhc2VfX3Bvc2l0aW9uLWluZm8tLXJlZHVjZWQge1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMjUlO1xuICAgICAgZmxleC1iYXNpczogMjUlO1xufVxuLnByb2R1Y3QtaXRlbS1iYXNlX19wb3NpdGlvbi1hY3Rpb25zIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4ucHJvZHVjdC1pdGVtLWJhc2VfX3Bvc2l0aW9uLWFjdGlvbnMgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi5wcm9kdWN0LWl0ZW0tYmFzZV9faW1hZ2Uge1xuICB3aWR0aDogNTAlO1xuICBwYWRkaW5nLXJpZ2h0OiAwLjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MXB4KSB7XG4gIC5wcm9kdWN0LWl0ZW0tYmFzZV9faW1hZ2Uge1xuICAgIHdpZHRoOiAxMy4zMzMzMzMzMzMzcmVtO1xuICAgIG1pbi13aWR0aDogMTMuMzMzMzMzMzMzM3JlbTtcbiAgfVxuICAucHJvZHVjdC1pdGVtLWJhc2VfX2ltYWdlLS1zZWFyY2gge1xuICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgbWF4LXdpZHRoOiA1cmVtO1xuICAgIG1pbi13aWR0aDogNXJlbTtcbiAgICBtaW4taGVpZ2h0OiA1cmVtO1xuICAgIG1heC1oZWlnaHQ6IDVyZW07XG4gIH1cbiAgLnByb2R1Y3QtaXRlbS1iYXNlX19pbWFnZS0tcHJvZHVjdC1jb25maWd1cmF0b3Ige1xuICAgIHdpZHRoOiA2LjY2NjY2NjY2NjdyZW07XG4gICAgbWluLXdpZHRoOiA2LjY2NjY2NjY2NjdyZW07XG4gIH1cbn1cbkBtZWRpYSBhbGwgYW5kICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSksICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSBhbmQgKG1pbi13aWR0aDogNTUxcHgpIHtcbiAgLnByb2R1Y3QtaXRlbS1iYXNlX19pbWFnZSAucHJvZHVjdC1pdGVtLWltYWdlX19pbWFnZSB7XG4gICAgd2lkdGg6IDEyLjMzMzMzMzMzMzNyZW07XG4gICAgbWluLXdpZHRoOiAxMi4zMzMzMzMzMzMzcmVtO1xuICB9XG59XG4ucHJvZHVjdC1pdGVtLWJhc2VfX2luZm8ge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMCAwLjY2NjY2NjY2NjdyZW07XG59XG4ucHJvZHVjdC1pdGVtLWJhc2VfX2Rlc2NyaXB0aW9uIHtcbiAgbWFyZ2luOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG4gIC1tcy1mbGV4LW5lZ2F0aXZlOiAwO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG59XG4ucHJvZHVjdC1pdGVtLWJhc2VfX2VuZXJneS1za3Uge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC13ZWJraXQtYm94LWFsaWduOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbn1cbi5wcm9kdWN0LWl0ZW0tYmFzZSAuZW5lcmd5LWxhYmVsIHtcbiAgZm9udC1zaXplOiAzcmVtO1xuICBsaW5lLWhlaWdodDogMS40NjY2NjY2NjY3cmVtO1xuICBtYXJnaW4tcmlnaHQ6IDAuNzVyZW07XG59XG4ucHJvZHVjdC1pdGVtLWJhc2UgLnByaWNlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIC13ZWJraXQtYm94LWFsaWduOiBlbmQ7XG4gICAgICAtbXMtZmxleC1hbGlnbjogZW5kO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbn1cbi5wcm9kdWN0LWl0ZW0tYmFzZSAucHJpY2UtLWNvbmZpZ3VyYXRvciwgLnByb2R1Y3QtaXRlbS1iYXNlIC5wcmljZS0tdHJhY2stY29uZmlndXJhdG9yIHtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAucHJvZHVjdC1pdGVtLWJhc2UgLnByaWNlLS1jb25maWd1cmF0b3IsIC5wcm9kdWN0LWl0ZW0tYmFzZSAucHJpY2UtLXRyYWNrLWNvbmZpZ3VyYXRvciB7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgLXdlYmtpdC1ib3gtYWxpZ246IGVuZDtcbiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGVuZDtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgfVxufVxuLnByb2R1Y3QtaXRlbS1iYXNlIC5wcmljZS0tY29uZmlndXJhdG9yIC5wcmljZV9fcXVhbnRpdHktaG9sZGVyLCAucHJvZHVjdC1pdGVtLWJhc2UgLnByaWNlLS10cmFjay1jb25maWd1cmF0b3IgLnByaWNlX19xdWFudGl0eS1ob2xkZXIge1xuICBtYXJnaW4tdG9wOiAxcmVtO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wcm9kdWN0LWl0ZW0tYmFzZSAucHJpY2UtLWNvbmZpZ3VyYXRvciAucHJpY2VfX3F1YW50aXR5LWhvbGRlciwgLnByb2R1Y3QtaXRlbS1iYXNlIC5wcmljZS0tdHJhY2stY29uZmlndXJhdG9yIC5wcmljZV9fcXVhbnRpdHktaG9sZGVyIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG59XG4ucHJvZHVjdC1pdGVtLWJhc2UgLnByaWNlLS10cmFjay1jb25maWd1cmF0b3Ige1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi10b3A6IDEuMzMzMzMzMzMzM3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtaXRlbS1iYXNlIC5wcmljZS0tdHJhY2stY29uZmlndXJhdG9yIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG59XG4ucHJvZHVjdC1pdGVtLWJhc2UgLnByaWNlLS10cmFjay1jb25maWd1cmF0b3IgLnByaWNlX19xdWFudGl0eS1ob2xkZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIG1hcmdpbi10b3A6IDA7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1pdGVtLWJhc2UgLnByaWNlLS10cmFjay1jb25maWd1cmF0b3IgLnByaWNlX19xdWFudGl0eS1ob2xkZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxufVxuLnByb2R1Y3QtaXRlbS1iYXNlIC5wcmljZS0tdHJhY2stY29uZmlndXJhdG9yIC5wcmljZV9fY29udGFpbmVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1pdGVtLWJhc2UgLnByaWNlLS10cmFjay1jb25maWd1cmF0b3IgLnByaWNlX19jb250YWluZXIge1xuICAgIHdpZHRoOiBhdXRvO1xuICB9XG59XG4ucHJvZHVjdC1pdGVtLWJhc2UgLmF2YWlsYWJpbGl0eSB7XG4gIG1hcmdpbi10b3A6IDAuNXJlbTtcbn1cbi5wcm9kdWN0LWl0ZW0tYmFzZSAuYXZhaWxhYmlsaXR5X19kb3RzIHtcbiAgd2lkdGg6IGF1dG87XG59XG4ucHJvZHVjdC1pdGVtLWJhc2UtLWNoZWNrb3V0LXN1bW1hcnkgLmF2YWlsYWJpbGl0eV9fbGFiZWwge1xuICBtYXJnaW4tbGVmdDogMC41cmVtO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuLnByb2R1Y3QtaXRlbS1iYXNlLS1jaGVja291dC1zdW1tYXJ5IC5wcm9kdWN0LWl0ZW0tYmFzZV9faW5mbyB7XG4gIHBhZGRpbmctcmlnaHQ6IDAuNXJlbTtcbn1cbi5wcm9kdWN0LWl0ZW0tYmFzZS0tY2hlY2tvdXQtc3VtbWFyeSAucHJvZHVjdC1pdGVtLWJhc2VfX2Rlc2NyaXB0aW9uIHtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG59XG4ucHJvZHVjdC1pdGVtLWJhc2UtLWNoZWNrb3V0LXN1bW1hcnkgLnByb2R1Y3QtaXRlbS1iYXNlX19pbWFnZSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gIC13ZWJraXQtYm94LXBhY2s6IHN0YXJ0O1xuICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICB3aWR0aDogMTAuNjY2NjY2NjY2N3JlbTtcbiAgbWluLXdpZHRoOiAxMC42NjY2NjY2NjY3cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjlweCkge1xuICAucHJvZHVjdC1pdGVtLWJhc2UtLWNoZWNrb3V0LXN1bW1hcnkgLnByb2R1Y3QtaXRlbS1iYXNlX19pbWFnZSB7XG4gICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cbn1cbkBtZWRpYSBhbGwgYW5kICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSksICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSBhbmQgKG1pbi13aWR0aDogNTUxcHgpIHtcbiAgLnByb2R1Y3QtaXRlbS1iYXNlLS1jaGVja291dC1zdW1tYXJ5IC5wcm9kdWN0LWl0ZW0taW1hZ2VfX2ltYWdlIHtcbiAgICB3aWR0aDogMTByZW07XG4gICAgbWluLXdpZHRoOiAxMHJlbTtcbiAgfVxufVxuLnByb2R1Y3QtaXRlbS1iYXNlLS1zaG9wcGluZy1saXN0IC5wcm9kdWN0LWl0ZW0tYmFzZV9faW1hZ2Uge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY5cHgpIHtcbiAgLnByb2R1Y3QtaXRlbS1iYXNlLS1zaG9wcGluZy1saXN0IC5wcm9kdWN0LWl0ZW0tYmFzZV9faW1hZ2Uge1xuICAgIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB9XG59XG4ucHJvZHVjdC1pdGVtLWJhc2UtLXNob3BwaW5nLWxpc3QgLnByb2R1Y3QtaXRlbS1iYXNlX19wb3NpdGlvbi1zZWxlY3Qge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTtcbiAgcGFkZGluZzogMXJlbTtcbiAgd2lkdGg6IDMuNDY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAzLjQ2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OXB4KSB7XG4gIC5wcm9kdWN0LWl0ZW0tYmFzZS0tc2hvcHBpbmctbGlzdCAucHJvZHVjdC1pdGVtLWJhc2VfX3Bvc2l0aW9uLXNlbGVjdCB7XG4gICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogY2VudGVyO1xuICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgcG9zaXRpb246IGluaGVyaXQ7XG4gICAgdG9wOiB1bnNldDtcbiAgICBsZWZ0OiB1bnNldDtcbiAgICBwYWRkaW5nOiB1bnNldDtcbiAgICB3aWR0aDogdW5zZXQ7XG4gICAgaGVpZ2h0OiB1bnNldDtcbiAgfVxufVxuLnByb2R1Y3QtaXRlbS1iYXNlLS1zaG9wcGluZy1saXN0IC5wcm9kdWN0LWl0ZW0tYmFzZV9fcmVtb3ZlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY5cHgpIHtcbiAgLnByb2R1Y3QtaXRlbS1iYXNlLS1zaG9wcGluZy1saXN0IC5wcm9kdWN0LWl0ZW0tYmFzZV9fcmVtb3ZlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLXRvcDogYXV0bztcbiAgICBwYWRkaW5nLXRvcDogMC41cmVtO1xuICB9XG59XG4ucHJvZHVjdC1pdGVtLWJhc2UtLXNob3BwaW5nLWxpc3QgLnByb2R1Y3QtaXRlbS1iYXNlX19yZW1vdmUgLmJ1dHRvbiB7XG4gIHBhZGRpbmc6IDA7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIC8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbi5wcm9kdWN0LWl0ZW0tYmFzZS0tc2hvcHBpbmctbGlzdCAucHJvZHVjdC1pdGVtLWJhc2VfX3JlbW92ZSAuYnV0dG9uX19sYWJlbCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuLnByb2R1Y3QtaXRlbS1iYXNlLS1zaG9wcGluZy1saXN0IC5wcm9kdWN0LWl0ZW0tYmFzZV9fcmVtb3ZlIC5idXR0b25fX2xhYmVsLWNvbnRhaW5lciB7XG4gIC13ZWJraXQtYm94LXBhY2s6IHN0YXJ0O1xuICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuLnByb2R1Y3QtaXRlbS1iYXNlLS1zaG9wcGluZy1saXN0IC5wcm9kdWN0LWl0ZW0tYmFzZV9fcmVtb3ZlLWljb24gLmljb24ge1xuICBmb250LXNpemU6IDIuNHJlbTtcbiAgbGluZS1oZWlnaHQ6IDNyZW07XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLnByb2R1Y3QtaXRlbS1iYXNlLS1zaG9wcGluZy1saXN0IC5wcm9kdWN0LWl0ZW0tYmFzZV9fcG9zaXRpb24taW5mbyB7XG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiA0NSU7XG4gICAgICBmbGV4LWJhc2lzOiA0NSU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjVweCkge1xuICAucHJvZHVjdC1pdGVtLWJhc2UtLXNob3BwaW5nLWxpc3QgLnByb2R1Y3QtaXRlbS1iYXNlX19wb3NpdGlvbi1pbmZvIHtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogNDIlO1xuICAgICAgICBmbGV4LWJhc2lzOiA0MiU7XG4gIH1cbn1cbi5wcm9kdWN0LWl0ZW0tYmFzZS0tc2hvcHBpbmctbGlzdCAucHJvZHVjdC1pdGVtLWJhc2VfX2FkZC10by1jYXJ0IHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi10b3A6IGF1dG87XG4gIHBhZGRpbmctdG9wOiAxcmVtO1xufVxuLnByb2R1Y3QtaXRlbS1iYXNlLS1zaG9wcGluZy1saXN0IC5wcm9kdWN0LWl0ZW0tYmFzZV9fYWRkLXRvLWNhcnQgLnF1YW50aXR5LWlucHV0LXNlbGVjdCB7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAucHJvZHVjdC1pdGVtLWJhc2UtLXNob3BwaW5nLWxpc3QgLnByb2R1Y3QtaXRlbS1iYXNlX19hZGQtdG8tY2FydCB7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbn1cbi5wcm9kdWN0LWl0ZW0tYmFzZS0tc2hvcHBpbmctbGlzdCAucHJvZHVjdC1pdGVtLWJhc2VfX2luZm8tY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAtbXMtZmxleC13cmFwOiBub3dyYXA7XG4gICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgd2lkdGg6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OXB4KSB7XG4gIC5wcm9kdWN0LWl0ZW0tYmFzZS0tc2hvcHBpbmctbGlzdCAucHJvZHVjdC1pdGVtLWJhc2VfX2luZm8tY29udGFpbmVyIHtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxufVxuLnByb2R1Y3QtaXRlbS1iYXNlLS1zZWFyY2gge1xuICBib3JkZXI6IG5vbmU7XG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbn1cbi5wcm9kdWN0LWl0ZW0tYmFzZS0tc2VhcmNoIC5wcm9kdWN0LWl0ZW0tYmFzZV9fdGl0bGUtLXNlYXJjaCB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cbi5wcm9kdWN0LWl0ZW0tYmFzZS0tc2VhcmNoIC5wcm9kdWN0LWl0ZW0tYmFzZV9fZGVzY3JpcHRpb24tLXNlYXJjaCB7XG4gIG1hcmdpbjogMDtcbn1cbi5wcm9kdWN0LWl0ZW0tYmFzZS0tc2VhcmNoIC50aXRsZS0tY2hlY2tvdXQge1xuICBtYXJnaW46IDA7XG59XG4ucHJvZHVjdC1pdGVtLWJhc2UtLXNlYXJjaCAucHJvZHVjdC1pdGVtLWJhc2VfX3Bvc2l0aW9uIHtcbiAgcGFkZGluZzogMDtcbn1cbi5wcm9kdWN0LWl0ZW0tYmFzZS0tc2VhcmNoIC5wcm9kdWN0LWl0ZW0tYmFzZV9faW5mby0tc2VhcmNoIHtcbiAgbWFyZ2luLWxlZnQ6IDFyZW07XG59XG5AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpLCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSkgYW5kIChtaW4td2lkdGg6IDU1MXB4KSB7XG4gIC5wcm9kdWN0LWl0ZW0tYmFzZS0tc2VhcmNoIC5wcm9kdWN0LWl0ZW0tYmFzZV9faW1hZ2Uge1xuICAgIC8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gICAgLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICB9XG4gIC5wcm9kdWN0LWl0ZW0tYmFzZS0tc2VhcmNoIC5wcm9kdWN0LWl0ZW0tYmFzZV9faW1hZ2UtLXNlYXJjaCAucHJvZHVjdC1pdGVtLWltYWdlX19pbWFnZSB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgbWluLXdpZHRoOiBhdXRvO1xuICB9XG59XG4ucHJvZHVjdC1pdGVtLWJhc2UtLWNvbmZpZ3VyYXRpb24ge1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4ucHJvZHVjdC1pdGVtLWJhc2UtLWNvbmZpZ3VyYXRpb24gLnByb2R1Y3QtaXRlbS1iYXNlX19wb3NpdGlvbiB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnByb2R1Y3QtaXRlbS1iYXNlLS1jb25maWd1cmF0aW9uIC5wcm9kdWN0LWl0ZW0tYmFzZV9fcG9zaXRpb24ge1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICB9XG59XG4ucHJvZHVjdC1pdGVtLWJhc2UtLWNvbmZpZ3VyYXRpb24gLnByb2R1Y3QtaXRlbS1iYXNlX19wcmljZS1hdmFpbGFiaWxpdHkge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGVuZDtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBlbmQ7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xufVxuLnByb2R1Y3QtaXRlbS1iYXNlLS1jb25maWd1cmF0aW9uIC5wcm9kdWN0LWl0ZW0tYmFzZV9fcHJpY2UtYXZhaWxhYmlsaXR5LS1uby1wcmljZSB7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLnByb2R1Y3QtaXRlbS1iYXNlLS1jb25maWd1cmF0aW9uIC5wcm9kdWN0LWl0ZW0tYmFzZV9fcHJpY2UtYXZhaWxhYmlsaXR5LS1uby1wcmljZSAucHJpY2UtLWNvbmZpZ3VyYXRvcixcbi5wcm9kdWN0LWl0ZW0tYmFzZS0tY29uZmlndXJhdGlvbiAucHJvZHVjdC1pdGVtLWJhc2VfX3ByaWNlLWF2YWlsYWJpbGl0eS0tbm8tcHJpY2UgLnByaWNlLS10cmFjay1jb25maWd1cmF0b3Ige1xuICB3aWR0aDogYXV0bztcbiAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XG59XG4ucHJvZHVjdC1pdGVtLWJhc2UtLWNvbmZpZ3VyYXRpb24gLnByb2R1Y3QtaXRlbS1iYXNlX19wcmljZS1hdmFpbGFiaWxpdHktLW5vLXByaWNlIC5hdmFpbGFiaWxpdHkge1xuICAtd2Via2l0LWJveC1wYWNrOiBlbmQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAxO1xuICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgd2lkdGg6IDEwMCU7XG59XG4ucHJvZHVjdC1pdGVtLWJhc2UtLWNvbmZpZ3VyYXRpb24gLnByb2R1Y3QtaXRlbS1iYXNlX19wcm9kdWN0LWluZm8ge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wcm9kdWN0LWl0ZW0tYmFzZS0tY29uZmlndXJhdGlvbiAucHJvZHVjdC1pdGVtLWJhc2VfX3Byb2R1Y3QtaW5mbyB7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbi5wcm9kdWN0LWl0ZW0tYmFzZS0tY29uZmlndXJhdGlvbiAucHJvZHVjdC1pdGVtLWJhc2VfX3Bvc2l0aW9uLWluZm8ge1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMTAwJTtcbiAgICAgIGZsZXgtYmFzaXM6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAucHJvZHVjdC1pdGVtLWJhc2UtLWNvbmZpZ3VyYXRpb24gLnByb2R1Y3QtaXRlbS1iYXNlX19wb3NpdGlvbi1pbmZvIHtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogNDAlO1xuICAgICAgICBmbGV4LWJhc2lzOiA0MCU7XG4gIH1cbiAgLnByb2R1Y3QtaXRlbS1iYXNlLS1jb25maWd1cmF0aW9uIC5wcm9kdWN0LWl0ZW0tYmFzZV9fcG9zaXRpb24taW5mby0tZHluYW1pYyB7XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XG4gICAgICAgIGZsZXgtYmFzaXM6IGF1dG87XG4gIH1cbiAgLnByb2R1Y3QtaXRlbS1iYXNlLS1jb25maWd1cmF0aW9uIC5wcm9kdWN0LWl0ZW0tYmFzZV9fcG9zaXRpb24taW5mby0tcmVkdWNlZCB7XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDI1JTtcbiAgICAgICAgZmxleC1iYXNpczogMjUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAucHJvZHVjdC1pdGVtLWJhc2UtLWNvbmZpZ3VyYXRpb24gLnByb2R1Y3QtaXRlbS1iYXNlX19wb3NpdGlvbi1pbmZvLS1keW5hbWljIHtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0bztcbiAgICAgICAgZmxleC1iYXNpczogYXV0bztcbiAgfVxufVxuLnByb2R1Y3QtaXRlbS1iYXNlLS1jb25maWd1cmF0aW9uIC5wcm9kdWN0LWl0ZW0tYmFzZV9fcG9zaXRpb24taW5mby0tcmVkdWNlZCAucHJpY2VfX2NvbnRhaW5lci0tY29uZmlndXJhdG9yIHtcbiAgLW1zLWZsZXgtaXRlbS1hbGlnbjogY2VudGVyO1xuICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xufVxuLnByb2R1Y3QtaXRlbS1iYXNlLS1jb25maWd1cmF0aW9uIC5wcm9kdWN0LWl0ZW0tYmFzZV9faW5mby1jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbn1cbi5wcm9kdWN0LWl0ZW0tYmFzZS0tY29uZmlndXJhdGlvbiAucHJvZHVjdC1pdGVtLWJhc2VfX3Bvc2l0aW9uLWFjdGlvbnMge1xuICBiYWNrZ3JvdW5kOiBub25lO1xufVxuLnByb2R1Y3QtaXRlbS1iYXNlLS1jb25maWd1cmF0aW9uIC5wcm9kdWN0LWl0ZW0tYmFzZV9fZW5lcmd5LXNrdSB7XG4gIG1hcmdpbi10b3A6IGF1dG87XG59XG4ucHJvZHVjdC1pdGVtLWJhc2UtLWNvbmZpZ3VyYXRpb24gLnByb2R1Y3QtaXRlbS1iYXNlX19pbWFnZS0tY29uZmlndXJhdGlvbiB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wcm9kdWN0LWl0ZW0tYmFzZS0tY29uZmlndXJhdGlvbiAucHJvZHVjdC1pdGVtLWJhc2VfX2ltYWdlLS1jb25maWd1cmF0aW9uIHtcbiAgICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgd2lkdGg6IDEwcmVtO1xuICAgIG1pbi13aWR0aDogMTByZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzc0cHgpIHtcbiAgLnByb2R1Y3QtaXRlbS1iYXNlLS1jb25maWd1cmF0aW9uIC5wcm9kdWN0LWl0ZW0tYmFzZV9fZGVzY3JpcHRpb24ge1xuICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgfVxufVxuLnByb2R1Y3QtaXRlbS1iYXNlLS1jb25maWd1cmF0aW9uIC5wcm9kdWN0LWl0ZW0tYmFzZV9faW1hZ2UtY29udGFpbmVyIHtcbiAgd2lkdGg6IDVyZW07XG4gIG1pbi13aWR0aDogNXJlbTtcbn1cbi5wcm9kdWN0LWl0ZW0tYmFzZS0tY29uZmlndXJhdGlvbiAucHJvZHVjdC1pdGVtLWJhc2VfX2F0dHJpYnV0ZXMtLWNvbmZpZ3VyYXRpb24ge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG59XG4ucHJvZHVjdC1pdGVtLWJhc2UtLWNvbmZpZ3VyYXRpb24gLnByb2R1Y3QtaXRlbS1iYXNlX19hdHRyaWJ1dGUge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC1tcy1mbGV4LWxpbmUtcGFjazogY2VudGVyO1xuICAgICAgYWxpZ24tY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xuICB3aWR0aDogNTAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAucHJvZHVjdC1pdGVtLWJhc2UtLWNvbmZpZ3VyYXRpb24gLnByb2R1Y3QtaXRlbS1iYXNlX19hdHRyaWJ1dGUge1xuICAgIHdpZHRoOiAzMy4zMzMzMzMzMzMzJTtcbiAgfVxufVxuLnByb2R1Y3QtaXRlbS1iYXNlLS1jb25maWd1cmF0aW9uIC5wcm9kdWN0LWl0ZW0tYmFzZV9fYXR0cmlidXRlLW5hbWUge1xuICAtbXMtd29yZC1icmVhazogYnJlYWstYWxsO1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWNsYXJhdGlvbi1ibG9jay1uby1kdXBsaWNhdGUtcHJvcGVydGllcyAqL1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAtbXMtaHlwaGVuczogYXV0bztcbiAgICAgIGh5cGhlbnM6IGF1dG87XG4gIGZvbnQtc2l6ZTogMC42NjY2NjY2NjY3cmVtO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuLnByb2R1Y3QtaXRlbS1iYXNlLS1jb25maWd1cmF0aW9uIC5wcm9kdWN0LWl0ZW0tYmFzZV9fYWN0aW9uLXRyaWdnZXItY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG59XG4ucHJvZHVjdC1pdGVtLWJhc2UtLWNvbmZpZ3VyYXRpb24gLnByb2R1Y3QtaXRlbS1iYXNlX19hY3Rpb24tdHJpZ2dlci1jb250YWluZXIgPiAqIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAucHJvZHVjdC1pdGVtLWJhc2UtLWNvbmZpZ3VyYXRpb24gLnByb2R1Y3QtaXRlbS1iYXNlX19hY3Rpb24tdHJpZ2dlci1jb250YWluZXIgPiAqOmZpcnN0LWNoaWxkIHtcbiAgICBtYXJnaW46IDAgMXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAucHJvZHVjdC1pdGVtLWJhc2UtLWNvbmZpZ3VyYXRpb24gLnByb2R1Y3QtaXRlbS1iYXNlX19hY3Rpb24tdHJpZ2dlci1jb250YWluZXIgPiAqOm9ubHktY2hpbGQge1xuICAgIG1hcmdpbjogMCAxcmVtIDAgYXV0bztcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1pdGVtLWJhc2UtLWNvbmZpZ3VyYXRpb24gLnByb2R1Y3QtaXRlbS1iYXNlX19hY3Rpb24tdHJpZ2dlci1jb250YWluZXIgPiAqIHtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgfVxufVxuLnByb2R1Y3QtaXRlbS1iYXNlLS1jb25maWd1cmF0aW9uIC5wcm9kdWN0LWl0ZW0tYmFzZV9fdHJpZ2dlci0tZG93bmxvYWQgLmJ1dHRvbl9fbGFiZWwtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLnByb2R1Y3QtaXRlbS1iYXNlLS1jb25maWd1cmF0aW9uIC5wcm9kdWN0LWl0ZW0tYmFzZV9fdHJpZ2dlci0tZG93bmxvYWQgLmljb24ge1xuICBsZWZ0OiAtMS41cmVtO1xufVxuLnByb2R1Y3QtaXRlbS1iYXNlLS1jb25maWd1cmF0aW9uIC5wcm9kdWN0LWl0ZW0tYmFzZV9fdHJpZ2dlci0tZG93bmxvYWQgLmljb24tLWNhcmV0LXVwIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5wcm9kdWN0LWl0ZW0tYmFzZS0tY29uZmlndXJhdGlvbiAucHJvZHVjdC1pdGVtLWJhc2VfX3RyaWdnZXItLWRvd25sb2FkLmFjdGl2ZSAuaWNvbi0tY2FyZXQtdXAge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4ucHJvZHVjdC1pdGVtLWJhc2UtLWNvbmZpZ3VyYXRpb24gLnByb2R1Y3QtaXRlbS1iYXNlX190cmlnZ2VyLS1kb3dubG9hZC5hY3RpdmUgLmljb24tLWNhcmV0LWRvd24ge1xuICBkaXNwbGF5OiBub25lO1xufVxuLnByb2R1Y3QtaXRlbS1iYXNlLS1jb25maWd1cmF0aW9uLWFjY2Vzc29yaWVzIC5wcm9kdWN0LWl0ZW0tYmFzZV9fcHJvZHVjdC1pbmZvIHtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG59XG4ucHJvZHVjdC1pdGVtLWJhc2UtLWNvbmZpZ3VyYXRpb24tYWNjZXNzb3JpZXMgLnByb2R1Y3QtaXRlbS1iYXNlX19pbWFnZS0tY29uZmlndXJhdGlvbiB7XG4gIHdpZHRoOiA1cmVtO1xuICBtaW4td2lkdGg6IDVyZW07XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5wcm9kdWN0LWl0ZW0taW1hZ2Uge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4ucHJvZHVjdC1pdGVtLWltYWdlX19pdGVtIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWl0ZW0taW1hZ2UtLXN1bW1hcnkge1xuICAgIHBhZGRpbmctdG9wOiAxLjg2NjY2NjY2NjdyZW07XG4gICAgcGFkZGluZy1ib3R0b206IDEuMzMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLnByb2R1Y3QtaXRlbS1pbWFnZS0tc2hvcHBpbmctbGlzdCB7XG4gIHBhZGRpbmc6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWl0ZW0taW1hZ2UtLXNob3BwaW5nLWxpc3Qge1xuICAgIHBhZGRpbmctdG9wOiAxLjg2NjY2NjY2NjdyZW07XG4gICAgcGFkZGluZy1ib3R0b206IDEuMzMzMzMzMzMzM3JlbTtcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucHJvZHVjdC1pdGVtLW9wdGlvbnMge1xuICBtYXJnaW4tdG9wOiAxLjA2NjY2NjY2NjdyZW07XG59XG4ucHJvZHVjdC1pdGVtLW9wdGlvbnMtLXN1bW1hcnkge1xuICBtYXJnaW4tdG9wOiAwLjI2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWl0ZW0tb3B0aW9ucy0tc3VtbWFyeSB7XG4gICAgbWFyZ2luLXRvcDogMS4wNjY2NjY2NjY3cmVtO1xuICB9XG59XG4ucHJvZHVjdC1pdGVtLW9wdGlvbnNfX2l0ZW0ge1xuICBmb250LXNpemU6IDAuODY2NjY2NjY2N3JlbTtcbiAgY29sb3I6ICNiMmIyYjI7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1pdGVtLW9wdGlvbnNfX2l0ZW0ge1xuICAgIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICB9XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5pbnNwaXJhdGlvbi1jb250ZW50LW1vZGFsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmluc3BpcmF0aW9uLWNvbnRlbnQtbW9kYWxfX3BvbGFybGlnaHQge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgLXdlYmtpdC1ib3gtZmxleDogMjtcbiAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAyO1xuICAgICAgICAgIGZsZXgtZ3JvdzogMjtcbn1cbi5pbnNwaXJhdGlvbi1jb250ZW50LW1vZGFsX19wb2xhcmxpZ2h0LWljb24ge1xuICBmb250LXNpemU6IDJyZW07XG4gIG1hcmdpbi10b3A6IC0wLjc1cmVtO1xuICBjb2xvcjogI2ZlY2MwMDtcbn1cbi5pbnNwaXJhdGlvbi1jb250ZW50LW1vZGFsX19wb2xhcmxpZ2h0LWxpbmsge1xuICBmb250LXdlaWdodDogNzAwO1xufVxuLmluc3BpcmF0aW9uLWNvbnRlbnQtbW9kYWxfX3ZhbHVlIHtcbiAgcGFkZGluZzogMCAxLjVyZW07XG59XG4uaW5zcGlyYXRpb24tY29udGVudC1tb2RhbF9fYXNzZXQge1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xufVxuLmluc3BpcmF0aW9uLWNvbnRlbnQtbW9kYWxfX2Fzc2V0IC5zZW8taW1hZ2VfX2ltYWdlIHtcbiAgd2lkdGg6IDkwJTtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmluc3BpcmF0aW9uLWNvbnRlbnQtbW9kYWwgLmJ1dHRvbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtbW9kYWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtbW9kYWxfX3BvbGFybGlnaHQge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgLXdlYmtpdC1ib3gtZmxleDogMjtcbiAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAyO1xuICAgICAgICAgIGZsZXgtZ3JvdzogMjtcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS1tb2RhbF9fcG9sYXJsaWdodC1pY29uIHtcbiAgZm9udC1zaXplOiAycmVtO1xuICBtYXJnaW4tdG9wOiAtMC43NXJlbTtcbiAgY29sb3I6ICNmZWNjMDA7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtbW9kYWxfX3BvbGFybGlnaHQtbGluayB7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtbW9kYWxfX3ZhbHVlIHtcbiAgcGFkZGluZzogMCAxLjVyZW07XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtbW9kYWxfX2Fzc2V0IHtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS1tb2RhbF9fYXNzZXQgLnNlby1pbWFnZV9faW1hZ2Uge1xuICB3aWR0aDogOTAlO1xuICBtYXJnaW46IDAgYXV0bztcbiAgZGlzcGxheTogYmxvY2s7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtbW9kYWwgLmJ1dHRvbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucHJvZHVjdC1saXN0LXNsaWRlciB7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gIG1hcmdpbi1ib3R0b206IDAuNjY2NjY2NjY2N3JlbTtcbiAgcGFkZGluZy1ib3R0b206IDEwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAwLjY2NjY2NjY2NjdyZW07XG59XG4ucHJvZHVjdC1saXN0LXNsaWRlciAuaGVhZGxpbmUge1xuICBmb250LXNpemU6IDJyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5wcm9kdWN0LWxpc3Qtc2xpZGVyIC5oZWFkbGluZSB7XG4gICAgZm9udC1zaXplOiAyLjRyZW07XG4gIH1cbn1cbi5wcm9kdWN0LWxpc3Qtc2xpZGVyIC5wcm9kdWN0LWJveF9fcHJpY2UgLnByaWNlX19hbW91bnQtbGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkgYW5kIChtYXgtd2lkdGg6IDEyNjBweCkge1xuICAucHJvZHVjdC1saXN0LXNsaWRlciAucHJvZHVjdC1ib3gge1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgfVxufVxuLnByb2R1Y3QtbGlzdC1zbGlkZXIgLnNsaWNrLWNhcm91c2VsIC5zbGljay0tbGlzdGluZy5zbGljay1hcnJvdyB7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbiAgb3BhY2l0eTogMTtcbn1cbi5wcm9kdWN0LWxpc3Qtc2xpZGVyIC5zbGljay1jYXJvdXNlbCAuc2xpY2stLWxpc3Rpbmcuc2xpY2stcHJldiB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4ucHJvZHVjdC1saXN0LXNsaWRlciAuc2xpY2stY2Fyb3VzZWwgLnNsaWNrLS1saXN0aW5nLnNsaWNrLW5leHQge1xuICBtYXJnaW4tdG9wOiAtMnJlbTtcbn1cbi5wcm9kdWN0LWxpc3Qtc2xpZGVyIC5pY29uOm5vdCguaWNvbi0tY2FyZXQtZG93bik6bm90KC5pY29uLS1pbmhvdXNlLXByb2R1Y3Rpb24pOm5vdCguaWNvbi0tZW5lcmd5KSB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLnByb2R1Y3QtbGlzdC1zbGlkZXIgLmljb246bm90KC5pY29uLS1jYXJldC1kb3duKTpub3QoLmljb24tLWluaG91c2UtcHJvZHVjdGlvbik6bm90KC5pY29uLS1lbmVyZ3kpOjpiZWZvcmUge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucHJvZHVjdC1saXN0aW5nLWJveCB7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICNlY2VjZWM7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ucHJvZHVjdC1saXN0aW5nLWJveF9fY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGhlaWdodDogYXV0bztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAxLjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWxpc3RpbmctYm94X19jb250YWluZXIge1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIC13ZWJraXQtYm94LWFsaWduOiBzdHJldGNoO1xuICAgICAgICAtbXMtZmxleC1hbGlnbjogc3RyZXRjaDtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICB9XG59XG4ucHJvZHVjdC1saXN0aW5nLWJveF9faW1hZ2Utd3JhcCB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleDogMTtcbiAgICAgICAgICBmbGV4OiAxO1xuICB3aWR0aDogMTAuNjY2NjY2NjY2N3JlbTtcbiAgcGFkZGluZy1yaWdodDogMXJlbTtcbn1cbi5wcm9kdWN0LWxpc3RpbmctYm94X19pbWFnZS13cmFwIC50aHVtYm5haWwge1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ucHJvZHVjdC1saXN0aW5nLWJveF9faW1hZ2Utd3JhcCAudGh1bWJuYWlsX19pbWFnZSB7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLnByb2R1Y3QtbGlzdGluZy1ib3hfX2ltYWdlLWFuZC1wcm9kdWN0LWluZm8ge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleDogMTtcbiAgICAgICAgICBmbGV4OiAxO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAucHJvZHVjdC1saXN0aW5nLWJveF9faW1hZ2UtYW5kLXByb2R1Y3QtaW5mbyB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbi5wcm9kdWN0LWxpc3RpbmctYm94X19wcm9kdWN0LWluZm8ge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LWFsaWduOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXg6IDE7XG4gICAgICAgICAgZmxleDogMTtcbn1cbi5wcm9kdWN0LWxpc3RpbmctYm94X19idXktaW5mbyB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGVuZDtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBlbmQ7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4OiAxO1xuICAgICAgICAgIGZsZXg6IDE7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5wcm9kdWN0LWxpc3RpbmctYm94X19idXktaW5mbyB7XG4gICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cbn1cbi5wcm9kdWN0LWxpc3RpbmctYm94X19wcmljZS1hbmQtYXZhaWxhYmlsaXR5LWluZm8ge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4OiAxO1xuICAgICAgICAgIGZsZXg6IDE7XG59XG4ucHJvZHVjdC1saXN0aW5nLWJveF9fcHJpY2UtYW5kLWF2YWlsYWJpbGl0eS1pbmZvIC5wcm9kdWN0LWxpc3RpbmctYm94X19hdmFpbGFiaWxpdHkge1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWxpc3RpbmctYm94X19wcmljZS1hbmQtYXZhaWxhYmlsaXR5LWluZm8ge1xuICAgIC13ZWJraXQtYm94LWFsaWduOiBlbmQ7XG4gICAgICAgIC1tcy1mbGV4LWFsaWduOiBlbmQ7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gIH1cbiAgLnByb2R1Y3QtbGlzdGluZy1ib3hfX3ByaWNlLWFuZC1hdmFpbGFiaWxpdHktaW5mbyAucHJvZHVjdC1saXN0aW5nLWJveF9fYXZhaWxhYmlsaXR5IHtcbiAgICAtd2Via2l0LWJveC1wYWNrOiBlbmQ7XG4gICAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLnByb2R1Y3QtbGlzdGluZy1ib3hfX2FkZC10by1jYXJ0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAucHJvZHVjdC1saXN0aW5nLWJveF9fYWRkLXRvLWNhcnQgLnNlbGVjdC1idXR0b24ge1xuICAgIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICB9XG4gIC5wcm9kdWN0LWxpc3RpbmctYm94X19hZGQtdG8tY2FydCAuc2VsZWN0LWJ1dHRvbiAuYnV0dG9uIHtcbiAgICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgICAtbXMtZmxleDogMTtcbiAgICAgICAgICAgIGZsZXg6IDE7XG4gIH1cbn1cbi5wcm9kdWN0LWxpc3RpbmctYm94X19lbmVyZ3ktbGFiZWwtYW5kLXNrdS1jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC13ZWJraXQtYm94LWFsaWduOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbn1cbi5wcm9kdWN0LWxpc3RpbmctYm94X19lbmVyZ3ktbGFiZWwgc3ZnIHtcbiAgd2lkdGg6IDIuMzMzMzMzMzMzM3JlbTtcbiAgaGVpZ2h0OiAyLjMzMzMzMzMzMzNyZW07XG59XG4ucHJvZHVjdC1saXN0aW5nLWJveF9fbmFtZSB7XG4gIC1tcy13b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLWJsb2NrLW5vLWR1cGxpY2F0ZS1wcm9wZXJ0aWVzICovXG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIC1tcy1oeXBoZW5zOiBhdXRvO1xuICAgICAgaHlwaGVuczogYXV0bztcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgZm9udC1zaXplOiAxLjJyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG4ucHJvZHVjdC1saXN0aW5nLWJveF9fZGVzY3JpcHRpb24sIC5wcm9kdWN0LWxpc3RpbmctYm94X19za3Uge1xuICBtYXJnaW4tdG9wOiAwO1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbn1cbi5wcm9kdWN0LWxpc3RpbmctYm94X192YXQtbGFiZWwge1xuICBsaW5lLWhlaWdodDogMS44O1xufVxuLnByb2R1Y3QtbGlzdGluZy1ib3ggLnByaWNlX19hbW91bnQge1xuICBsaW5lLWhlaWdodDogMS44O1xufVxuLnByb2R1Y3QtbGlzdGluZy1ib3hfX2F2YWlsYWJpbGl0eSB7XG4gIC13ZWJraXQtYm94LXBhY2s6IGVuZDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICBsaW5lLWhlaWdodDogMS44O1xufVxuLnByb2R1Y3QtbGlzdGluZy1ib3hfX2F2YWlsYWJpbGl0eSAuYXZhaWxhYmlsaXR5X19kb3RzIHtcbiAgd2lkdGg6IGF1dG87XG59XG4ucHJvZHVjdC1saXN0aW5nLWJveF9fYXZhaWxhYmlsaXR5IC5hdmFpbGFiaWxpdHlfX2xhYmVsIHtcbiAgbWFyZ2luLWxlZnQ6IDcuNXB4O1xuICBtYXJnaW4tbGVmdDogMC41cmVtO1xufVxuLnByb2R1Y3QtbGlzdGluZy1ib3hfX2FjdGlvbnMtY29udGFpbmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazogZW5kO1xuICAgICAgLW1zLWZsZXgtcGFjazogZW5kO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIHBhZGRpbmc6IDEuNXJlbTtcbn1cbi5wcm9kdWN0LWxpc3RpbmctYm94X19hY3Rpb25zLWNvbnRhaW5lciBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLnByb2R1Y3QtbGlzdGluZy1ib3hfX2FjdGlvbnMtY29udGFpbmVyIC5pY29uLWJ1dHRvbiB7XG4gIG1hcmdpbjogMCAwIDAgMC42NjY2NjY2NjY3cmVtO1xufVxuLnByb2R1Y3QtbGlzdGluZy1ib3hfX3ZhcmlhbnQtaW5mbyB7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICNkMGQwZDA7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gIGNvbG9yOiAjYjJiMmIyO1xuICBtYXJnaW4tdG9wOiAxcmVtO1xuICBwYWRkaW5nOiAwLjRyZW0gMS4zMzMzMzMzMzMzcmVtO1xuICBmb250LXNpemU6IDAuOHJlbTtcbn1cbi5wcm9kdWN0LWxpc3RpbmctYm94IC5zbGljay1jYXJvdXNlbCB7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5wcm9kdWN0LWxpc3RpbmctYm94IC5zbGljay1jYXJvdXNlbF9fY29udGFpbmVyLFxuLnByb2R1Y3QtbGlzdGluZy1ib3ggLnNsaWNrLWNhcm91c2VsIC5zbGljay1saXN0LFxuLnByb2R1Y3QtbGlzdGluZy1ib3ggLnNsaWNrLWNhcm91c2VsIC5zbGljay10cmFjayxcbi5wcm9kdWN0LWxpc3RpbmctYm94IC5zbGljay1jYXJvdXNlbCAuc2xpY2stc2xpZGUge1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ucHJvZHVjdC1saXN0aW5nLWJveCAuc2xpY2stY2Fyb3VzZWwgLnNsaWNrLXNsaWRlIHtcbiAgbWFyZ2luOiAwIDFyZW07XG59XG4ucHJvZHVjdC1saXN0aW5nLWJveCAuc2xpY2stY2Fyb3VzZWwgLm5hdi1hcnJvdyB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiA2MHB4O1xuICB3aWR0aDogNHJlbTtcbiAgaGVpZ2h0OiA0NXB4O1xuICBoZWlnaHQ6IDNyZW07XG4gIHRvcDogdW5zZXQ7XG4gIGJvdHRvbTogLTFyZW07XG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcbiAgb3BhY2l0eTogMTtcbiAgZm9udC1zaXplOiA0cmVtO1xuICBsaW5lLWhlaWdodDogMC41O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1saXN0aW5nLWJveCAuc2xpY2stY2Fyb3VzZWwgLm5hdi1hcnJvdyB7XG4gICAgYm90dG9tOiAtMnJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnByb2R1Y3QtbGlzdGluZy1ib3ggLnNsaWNrLWNhcm91c2VsIC5uYXYtYXJyb3cge1xuICAgIGZvbnQtc2l6ZTogMnJlbTtcbiAgICB3aWR0aDogMzBweDtcbiAgICB3aWR0aDogMnJlbTtcbiAgICBoZWlnaHQ6IDMwcHg7XG4gICAgaGVpZ2h0OiAycmVtO1xuICAgIGJvdHRvbTogLTFyZW07XG4gIH1cbn1cbi5wcm9kdWN0LWxpc3RpbmctYm94IC5zbGljay1jYXJvdXNlbCAubmF2LWFycm93LS1wcmV2IHtcbiAgbGVmdDogMXJlbTtcbn1cbi5wcm9kdWN0LWxpc3RpbmctYm94IC5zbGljay1jYXJvdXNlbCAubmF2LWFycm93LS1uZXh0IHtcbiAgcmlnaHQ6IDFyZW07XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5xdWFudGl0eS1jb3VudGVyIHtcbiAgcGFkZGluZzogMC41MzMzMzMzMzMzcmVtIDAuNjY2NjY2NjY2N3JlbTtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQ6ICMxYTE3MWI7XG59XG4ucXVhbnRpdHktY291bnRlcl9faW5wdXQge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGZvbnQtc2l6ZTogMS4wNjY2NjY2NjY3cmVtO1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICB3aWR0aDogMy4wNjY2NjY2NjY3cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlcjogbm9uZTtcbiAgYmFja2dyb3VuZDogbm9uZTtcbn1cbi5xdWFudGl0eS1jb3VudGVyX19pbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgICBhcHBlYXJhbmNlOiBub25lO1xufVxuLnF1YW50aXR5LWNvdW50ZXJfX2J1dHRvbiB7XG4gIHdpZHRoOiAxLjg2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMS44NjY2NjY2NjY3cmVtO1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMC42NjY2NjY2NjY3cmVtIDAuNjY2NjY2NjY2N3JlbSAwIHJnYmEoMCwgMCwgMCwgMC4yKSwgMCAwLjJyZW0gMC4ycmVtIDAgcmdiYSgwLCAwLCAwLCAwLjIpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMC42NjY2NjY2NjY3cmVtIDAuNjY2NjY2NjY2N3JlbSAwIHJnYmEoMCwgMCwgMCwgMC4yKSwgMCAwLjJyZW0gMC4ycmVtIDAgcmdiYSgwLCAwLCAwLCAwLjIpO1xuICBsaW5lLWhlaWdodDogMDtcbiAgZm9udC1zaXplOiAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDI1MG1zIGVhc2UtaW4tb3V0O1xufVxuLnF1YW50aXR5LWNvdW50ZXJfX2J1dHRvbi0tZGVjcmVtZW50OjpiZWZvcmUsIC5xdWFudGl0eS1jb3VudGVyX19idXR0b24tLWluY3JlbWVudDo6YmVmb3JlLCAucXVhbnRpdHktY291bnRlcl9fYnV0dG9uLS1pbmNyZW1lbnQ6OmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIHRvcDogNTAlO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB3aWR0aDogMC42cmVtO1xuICBoZWlnaHQ6IDAuMTMzMzMzMzMzM3JlbTtcbiAgYmFja2dyb3VuZDogI2IyYjJiMjtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDI1MG1zIGVhc2UtaW4tb3V0O1xufVxuLnF1YW50aXR5LWNvdW50ZXJfX2J1dHRvbi0taW5jcmVtZW50OjphZnRlciB7XG4gIHdpZHRoOiAwLjEzMzMzMzMzMzNyZW07XG4gIGhlaWdodDogMC42cmVtO1xufVxuLnF1YW50aXR5LWNvdW50ZXJfX2J1dHRvbjpob3ZlciB7XG4gIGJhY2tncm91bmQ6ICNmZWNjMDA7XG59XG4ucXVhbnRpdHktY291bnRlcl9fYnV0dG9uOmhvdmVyOjpiZWZvcmUsIC5xdWFudGl0eS1jb3VudGVyX19idXR0b246aG92ZXI6OmFmdGVyIHtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbn1cbi5xdWFudGl0eS1jb3VudGVyX19idXR0b24tLWRpc2FibGVkIHtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAuMnJlbSAwLjJyZW0gMCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwLjJyZW0gMC4ycmVtIDAgcmdiYSgwLCAwLCAwLCAwLjIpO1xufVxuLnF1YW50aXR5LWNvdW50ZXJfX2J1dHRvbi0tZGlzYWJsZWQ6OmJlZm9yZSwgLnF1YW50aXR5LWNvdW50ZXJfX2J1dHRvbi0tZGlzYWJsZWQ6OmFmdGVyIHtcbiAgYmFja2dyb3VuZDogIzRiNGI0ZDtcbn1cbi5xdWFudGl0eS1jb3VudGVyX19idXR0b24tLWRpc2FibGVkOmhvdmVyLCAucXVhbnRpdHktY291bnRlcl9fYnV0dG9uLS1kaXNhYmxlZDpmb2N1cyB7XG4gIGJhY2tncm91bmQ6ICNmZmY7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLnF1YW50aXR5LWNvdW50ZXJfX2J1dHRvbi0tZGlzYWJsZWQ6aG92ZXI6OmJlZm9yZSwgLnF1YW50aXR5LWNvdW50ZXJfX2J1dHRvbi0tZGlzYWJsZWQ6aG92ZXI6OmFmdGVyLCAucXVhbnRpdHktY291bnRlcl9fYnV0dG9uLS1kaXNhYmxlZDpmb2N1czo6YmVmb3JlLCAucXVhbnRpdHktY291bnRlcl9fYnV0dG9uLS1kaXNhYmxlZDpmb2N1czo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kOiAjNGI0YjRkO1xufVxuLnF1YW50aXR5LWNvdW50ZXItLXJpZ2h0LXNwYWNlIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjY2NjY2NjY2NjdyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5xdWFudGl0eS1jb3VudGVyLS1jYXJ0IHtcbiAgICBwYWRkaW5nLXRvcDogMC42NjY2NjY2NjY3cmVtO1xuICAgIHBhZGRpbmctYm90dG9tOiAwLjhyZW07XG4gIH1cbn1cbi5xdWFudGl0eS1jb3VudGVyLS1zaG9wcGluZy1saXN0IHtcbiAgcGFkZGluZy10b3A6IDAuNjY2NjY2NjY2N3JlbTtcbiAgcGFkZGluZy1ib3R0b206IDAuOHJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS4zMzMzMzMzMzMzcmVtO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucXVhbnRpdHktaW5wdXQtc2VsZWN0IHtcbiAgaGVpZ2h0OiA1MHB4O1xuICBoZWlnaHQ6IDMuMzMzMzMzMzMzM3JlbTtcbiAgd2lkdGg6IDc1cHg7XG4gIHdpZHRoOiA1cmVtO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDM3NXB4KSB7XG4gIC5xdWFudGl0eS1pbnB1dC1zZWxlY3Qge1xuICAgIHdpZHRoOiA4NXB4O1xuICAgIHdpZHRoOiA1LjY2NjY2NjY2NjdyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnF1YW50aXR5LWlucHV0LXNlbGVjdCB7XG4gICAgd2lkdGg6IDg1cHg7XG4gICAgd2lkdGg6IDUuNjY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLnF1YW50aXR5LWlucHV0LXNlbGVjdCBsYWJlbCB7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5xdWFudGl0eS1pbnB1dC1zZWxlY3RfX2lucHV0LCAucXVhbnRpdHktaW5wdXQtc2VsZWN0X19zZWxlY3QsIC5xdWFudGl0eS1pbnB1dC1zZWxlY3RfX3NhdmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG59XG4ucXVhbnRpdHktaW5wdXQtc2VsZWN0X19pbnB1dC5oaWRkZW4sIC5xdWFudGl0eS1pbnB1dC1zZWxlY3RfX3NlbGVjdC5oaWRkZW4sIC5xdWFudGl0eS1pbnB1dC1zZWxlY3RfX3NhdmUuaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5xdWFudGl0eS1pbnB1dC1zZWxlY3RfX2lucHV0LCAucXVhbnRpdHktaW5wdXQtc2VsZWN0X19zZWxlY3Qge1xuICB3aWR0aDogMTAwJTtcbiAgbGVmdDogMDtcbn1cbi5xdWFudGl0eS1pbnB1dC1zZWxlY3RfX2lucHV0IHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLnF1YW50aXR5LWlucHV0LXNlbGVjdF9faW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICAgICAgYXBwZWFyYW5jZTogbm9uZTtcbn1cbi5xdWFudGl0eS1pbnB1dC1zZWxlY3RfX2lucHV0Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3Ige1xuICBvcGFjaXR5OiAxO1xufVxuLnF1YW50aXR5LWlucHV0LXNlbGVjdF9fc2VsZWN0LCAucXVhbnRpdHktaW5wdXQtc2VsZWN0X19zYXZlIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLnF1YW50aXR5LWlucHV0LXNlbGVjdF9fc2VsZWN0IHtcbiAgcGFkZGluZzogMCAwLjkzMzMzMzMzMzNyZW07XG59XG4ucXVhbnRpdHktaW5wdXQtc2VsZWN0X19zZWxlY3QgLnNlbGVjdF9fc2VsZWN0IHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLnF1YW50aXR5LWlucHV0LXNlbGVjdF9fc2VsZWN0LnZpc2libGUge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5xdWFudGl0eS1pbnB1dC1zZWxlY3RfX3NhdmUge1xuICBoZWlnaHQ6IDUwcHg7XG4gIGhlaWdodDogMy4zMzMzMzMzMzMzcmVtO1xuICByaWdodDogMDtcbiAgbWFyZ2luOiAwO1xufVxuLnF1YW50aXR5LWlucHV0LXNlbGVjdF9fc2F2ZS52aXNpYmxlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtYm94O1xuICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xufVxuLnF1YW50aXR5LWlucHV0LXNlbGVjdC0tc2hvcHBpbmctbGlzdCB7XG4gIHBhZGRpbmctdG9wOiAwLjY2NjY2NjY2NjdyZW07XG4gIHBhZGRpbmctYm90dG9tOiAwLjhyZW07XG4gIG1hcmdpbi1ib3R0b206IDEuMzMzMzMzMzMzM3JlbTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyohIG5vdWlzbGlkZXIgLSAxMS4xLjAgLSAyMDE4LTA0LTAyIDExOjE4OjEzICovXG4vKiBGdW5jdGlvbmFsIHN0eWxpbmc7XG4gKiBUaGVzZSBzdHlsZXMgYXJlIHJlcXVpcmVkIGZvciBub1VpU2xpZGVyIHRvIGZ1bmN0aW9uLlxuICogWW91IGRvbid0IG5lZWQgdG8gY2hhbmdlIHRoZXNlIHJ1bGVzIHRvIGFwcGx5IHlvdXIgZGVzaWduLlxuICovXG4ubm9VaS10YXJnZXQsXG4ubm9VaS10YXJnZXQgKiB7XG4gIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApO1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAtbXMtdG91Y2gtYWN0aW9uOiBub25lO1xuICB0b3VjaC1hY3Rpb246IG5vbmU7XG4gIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4ubm9VaS10YXJnZXQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpcmVjdGlvbjogbHRyO1xufVxuXG4ubm9VaS1iYXNlLFxuLm5vVWktY29ubmVjdHMge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG59XG5cbi8qIFdyYXBwZXIgZm9yIGFsbCBjb25uZWN0IGVsZW1lbnRzLlxuICovXG4ubm9VaS1jb25uZWN0cyB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHotaW5kZXg6IDA7XG59XG5cbi5ub1VpLWNvbm5lY3QsXG4ubm9VaS1vcmlnaW4ge1xuICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDE7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XG4gIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcbn1cblxuLyogT2Zmc2V0IGRpcmVjdGlvblxuICovXG5odG1sOm5vdChbZGlyPXJ0bF0pIC5ub1VpLWhvcml6b250YWwgLm5vVWktb3JpZ2luIHtcbiAgbGVmdDogYXV0bztcbiAgcmlnaHQ6IDA7XG59XG5cbi8qIEdpdmUgb3JpZ2lucyAwIGhlaWdodC93aWR0aCBzbyB0aGV5IGRvbid0IGludGVyZmVyZSB3aXRoIGNsaWNraW5nIHRoZVxuICogY29ubmVjdCBlbGVtZW50cy5cbiAqL1xuLm5vVWktdmVydGljYWwgLm5vVWktb3JpZ2luIHtcbiAgd2lkdGg6IDA7XG59XG5cbi5ub1VpLWhvcml6b250YWwgLm5vVWktb3JpZ2luIHtcbiAgaGVpZ2h0OiAwO1xufVxuXG4ubm9VaS1oYW5kbGUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG59XG5cbi5ub1VpLXN0YXRlLXRhcCAubm9VaS1jb25uZWN0LFxuLm5vVWktc3RhdGUtdGFwIC5ub1VpLW9yaWdpbiB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3M7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4zcztcbiAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4zcztcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3M7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzLCAtd2Via2l0LXRyYW5zZm9ybSAwLjNzO1xufVxuXG4ubm9VaS1zdGF0ZS1kcmFnICoge1xuICBjdXJzb3I6IGluaGVyaXQgIWltcG9ydGFudDtcbn1cblxuLyogU2xpZGVyIHNpemUgYW5kIGhhbmRsZSBwbGFjZW1lbnQ7XG4gKi9cbi5ub1VpLWhvcml6b250YWwge1xuICBoZWlnaHQ6IDE4cHg7XG59XG5cbi5ub1VpLWhvcml6b250YWwgLm5vVWktaGFuZGxlIHtcbiAgd2lkdGg6IDM0cHg7XG4gIGhlaWdodDogMjhweDtcbiAgbGVmdDogLTE3cHg7XG4gIHRvcDogLTZweDtcbn1cblxuLm5vVWktdmVydGljYWwge1xuICB3aWR0aDogMThweDtcbn1cblxuLm5vVWktdmVydGljYWwgLm5vVWktaGFuZGxlIHtcbiAgd2lkdGg6IDI4cHg7XG4gIGhlaWdodDogMzRweDtcbiAgbGVmdDogLTZweDtcbiAgdG9wOiAtMTdweDtcbn1cblxuaHRtbDpub3QoW2Rpcj1ydGxdKSAubm9VaS1ob3Jpem9udGFsIC5ub1VpLWhhbmRsZSB7XG4gIHJpZ2h0OiAtMTdweDtcbiAgbGVmdDogYXV0bztcbn1cblxuLyogU3R5bGluZztcbiAqIEdpdmluZyB0aGUgY29ubmVjdCBlbGVtZW50IGEgYm9yZGVyIHJhZGl1cyBjYXVzZXMgaXNzdWVzIHdpdGggdXNpbmcgdHJhbnNmb3JtOiBzY2FsZVxuICovXG4ubm9VaS10YXJnZXQge1xuICBiYWNrZ3JvdW5kOiAjRkFGQUZBO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEM0QzRDM7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4ICNGMEYwRjAsIDAgM3B4IDZweCAtNXB4ICNCQkI7XG4gICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4ICNGMEYwRjAsIDAgM3B4IDZweCAtNXB4ICNCQkI7XG59XG5cbi5ub1VpLWNvbm5lY3RzIHtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4ubm9VaS1jb25uZWN0IHtcbiAgYmFja2dyb3VuZDogIzNGQjhBRjtcbn1cblxuLyogSGFuZGxlcyBhbmQgY3Vyc29ycztcbiAqL1xuLm5vVWktZHJhZ2dhYmxlIHtcbiAgY3Vyc29yOiBldy1yZXNpemU7XG59XG5cbi5ub1VpLXZlcnRpY2FsIC5ub1VpLWRyYWdnYWJsZSB7XG4gIGN1cnNvcjogbnMtcmVzaXplO1xufVxuXG4ubm9VaS1oYW5kbGUge1xuICBib3JkZXI6IDFweCBzb2xpZCAjRDlEOUQ5O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGJhY2tncm91bmQ6ICNGRkY7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDAgMXB4ICNGRkYsIGluc2V0IDAgMXB4IDdweCAjRUJFQkVCLCAwIDNweCA2cHggLTNweCAjQkJCO1xuICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAxcHggI0ZGRiwgaW5zZXQgMCAxcHggN3B4ICNFQkVCRUIsIDAgM3B4IDZweCAtM3B4ICNCQkI7XG59XG5cbi5ub1VpLWFjdGl2ZSB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDFweCAjRkZGLCBpbnNldCAwIDFweCA3cHggI0RERCwgMCAzcHggNnB4IC0zcHggI0JCQjtcbiAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMXB4ICNGRkYsIGluc2V0IDAgMXB4IDdweCAjRERELCAwIDNweCA2cHggLTNweCAjQkJCO1xufVxuXG4vKiBIYW5kbGUgc3RyaXBlcztcbiAqL1xuLm5vVWktaGFuZGxlOmJlZm9yZSxcbi5ub1VpLWhhbmRsZTphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGhlaWdodDogMTRweDtcbiAgd2lkdGg6IDFweDtcbiAgYmFja2dyb3VuZDogI0U4RTdFNjtcbiAgbGVmdDogMTRweDtcbiAgdG9wOiA2cHg7XG59XG5cbi5ub1VpLWhhbmRsZTphZnRlciB7XG4gIGxlZnQ6IDE3cHg7XG59XG5cbi5ub1VpLXZlcnRpY2FsIC5ub1VpLWhhbmRsZTpiZWZvcmUsXG4ubm9VaS12ZXJ0aWNhbCAubm9VaS1oYW5kbGU6YWZ0ZXIge1xuICB3aWR0aDogMTRweDtcbiAgaGVpZ2h0OiAxcHg7XG4gIGxlZnQ6IDZweDtcbiAgdG9wOiAxNHB4O1xufVxuXG4ubm9VaS12ZXJ0aWNhbCAubm9VaS1oYW5kbGU6YWZ0ZXIge1xuICB0b3A6IDE3cHg7XG59XG5cbi8qIERpc2FibGVkIHN0YXRlO1xuICovXG5bZGlzYWJsZWRdIC5ub1VpLWNvbm5lY3Qge1xuICBiYWNrZ3JvdW5kOiAjQjhCOEI4O1xufVxuXG5bZGlzYWJsZWRdLm5vVWktdGFyZ2V0LFxuW2Rpc2FibGVkXS5ub1VpLWhhbmRsZSxcbltkaXNhYmxlZF0gLm5vVWktaGFuZGxlIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLyogQmFzZTtcbiAqXG4gKi9cbi5ub1VpLXBpcHMsXG4ubm9VaS1waXBzICoge1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLm5vVWktcGlwcyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgY29sb3I6ICM5OTk7XG59XG5cbi8qIFZhbHVlcztcbiAqXG4gKi9cbi5ub1VpLXZhbHVlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5ub1VpLXZhbHVlLXN1YiB7XG4gIGNvbG9yOiAjY2NjO1xuICBmb250LXNpemU6IDEwcHg7XG59XG5cbi8qIE1hcmtpbmdzO1xuICpcbiAqL1xuLm5vVWktbWFya2VyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBiYWNrZ3JvdW5kOiAjQ0NDO1xufVxuXG4ubm9VaS1tYXJrZXItc3ViIHtcbiAgYmFja2dyb3VuZDogI0FBQTtcbn1cblxuLm5vVWktbWFya2VyLWxhcmdlIHtcbiAgYmFja2dyb3VuZDogI0FBQTtcbn1cblxuLyogSG9yaXpvbnRhbCBsYXlvdXQ7XG4gKlxuICovXG4ubm9VaS1waXBzLWhvcml6b250YWwge1xuICBwYWRkaW5nOiAxMHB4IDA7XG4gIGhlaWdodDogODBweDtcbiAgdG9wOiAxMDAlO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLm5vVWktdmFsdWUtaG9yaXpvbnRhbCB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgNTAlKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgNTAlKTtcbn1cblxuLm5vVWktcnRsIC5ub1VpLXZhbHVlLWhvcml6b250YWwge1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDUwJSwgNTAlKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNTAlLCA1MCUpO1xufVxuXG4ubm9VaS1tYXJrZXItaG9yaXpvbnRhbC5ub1VpLW1hcmtlciB7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICB3aWR0aDogMnB4O1xuICBoZWlnaHQ6IDVweDtcbn1cblxuLm5vVWktbWFya2VyLWhvcml6b250YWwubm9VaS1tYXJrZXItc3ViIHtcbiAgaGVpZ2h0OiAxMHB4O1xufVxuXG4ubm9VaS1tYXJrZXItaG9yaXpvbnRhbC5ub1VpLW1hcmtlci1sYXJnZSB7XG4gIGhlaWdodDogMTVweDtcbn1cblxuLyogVmVydGljYWwgbGF5b3V0O1xuICpcbiAqL1xuLm5vVWktcGlwcy12ZXJ0aWNhbCB7XG4gIHBhZGRpbmc6IDAgMTBweDtcbiAgaGVpZ2h0OiAxMDAlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDEwMCU7XG59XG5cbi5ub1VpLXZhbHVlLXZlcnRpY2FsIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtNTAlKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTUwJSwgMCk7XG4gIHBhZGRpbmctbGVmdDogMjVweDtcbn1cblxuLm5vVWktcnRsIC5ub1VpLXZhbHVlLXZlcnRpY2FsIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCA1MCUpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCA1MCUpO1xufVxuXG4ubm9VaS1tYXJrZXItdmVydGljYWwubm9VaS1tYXJrZXIge1xuICB3aWR0aDogNXB4O1xuICBoZWlnaHQ6IDJweDtcbiAgbWFyZ2luLXRvcDogLTFweDtcbn1cblxuLm5vVWktbWFya2VyLXZlcnRpY2FsLm5vVWktbWFya2VyLXN1YiB7XG4gIHdpZHRoOiAxMHB4O1xufVxuXG4ubm9VaS1tYXJrZXItdmVydGljYWwubm9VaS1tYXJrZXItbGFyZ2Uge1xuICB3aWR0aDogMTVweDtcbn1cblxuLm5vVWktdG9vbHRpcCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNEOUQ5RDk7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgY29sb3I6ICMwMDA7XG4gIHBhZGRpbmc6IDVweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4ubm9VaS1ob3Jpem9udGFsIC5ub1VpLXRvb2x0aXAge1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIDApO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwKTtcbiAgbGVmdDogNTAlO1xuICBib3R0b206IDEyMCU7XG59XG5cbi5ub1VpLXZlcnRpY2FsIC5ub1VpLXRvb2x0aXAge1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC01MCUpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtNTAlKTtcbiAgdG9wOiA1MCU7XG4gIHJpZ2h0OiAxMjAlO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucmFuZ2Utc2xpZGVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IHJldmVyc2U7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgYm9yZGVyOiBub25lO1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBoZWlnaHQ6IGF1dG87XG4gIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICBtYXJnaW46IDAgN3B4O1xufVxuLnJhbmdlLXNsaWRlciAubm9VaS1iYXNlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBwYWRkaW5nOiA2cHggMDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5yYW5nZS1zbGlkZXIgLm5vVWktY29ubmVjdHMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDBkMGQwO1xuICBoZWlnaHQ6IDJweDtcbiAgbWFyZ2luOiAwIC03cHg7XG4gIHdpZHRoOiBjYWxjKDEwMCUgKyAxNHB4KTtcbn1cbi5yYW5nZS1zbGlkZXIgLm5vVWktY29ubmVjdCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWNjMDA7XG59XG4ucmFuZ2Utc2xpZGVyIC5ub1VpLWhhbmRsZSB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyBlYXNlLWluLW91dCwgLXdlYmtpdC10cmFuc2Zvcm0gMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHdpZHRoOiAxNHB4O1xuICBoZWlnaHQ6IDE0cHg7XG4gIGJvcmRlci1yYWRpdXM6IDdweDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIGJvcmRlcjogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZlY2MwMDtcbn1cbi5yYW5nZS1zbGlkZXIgLm5vVWktaGFuZGxlOjpiZWZvcmUsIC5yYW5nZS1zbGlkZXIgLm5vVWktaGFuZGxlOjphZnRlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ucmFuZ2Utc2xpZGVyIC5ub1VpLWhhbmRsZTpob3ZlciB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEuMyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjMpO1xufVxuLnJhbmdlLXNsaWRlci5ub1VpLWhvcml6b250YWwgLm5vVWktaGFuZGxlIHtcbiAgdG9wOiAwO1xufVxuaHRtbDpub3QoW2Rpcj1ydGxdKSAucmFuZ2Utc2xpZGVyLm5vVWktaG9yaXpvbnRhbCAubm9VaS1oYW5kbGUge1xuICByaWdodDogMDtcbiAgbWFyZ2luLXJpZ2h0OiAtN3B4O1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucmVjb21tZW5kZWQtcHJvZHVjdC1ib3gge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBwYWRkaW5nOiAxLjMzMzMzMzMzMzNyZW0gMC42NjY2NjY2NjY3cmVtO1xufVxuLnJlY29tbWVuZGVkLXByb2R1Y3QtYm94IHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4ucmVjb21tZW5kZWQtcHJvZHVjdC1ib3hfX2ltYWdlIHtcbiAgd2lkdGg6IDUuMzMzMzMzMzMzM3JlbTtcbiAgbWluLXdpZHRoOiA1LjMzMzMzMzMzMzNyZW07XG59XG4ucmVjb21tZW5kZWQtcHJvZHVjdC1ib3hfX2RldGFpbHMtY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cbi5yZWNvbW1lbmRlZC1wcm9kdWN0LWJveF9fZGV0YWlscy1jb250YWluZXItLXdpdGgtbGVmdC1wYWRkaW5nIHtcbiAgcGFkZGluZy1sZWZ0OiAwLjc1cmVtO1xufVxuQG1lZGlhIGFsbCBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKSwgKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpIHtcbiAgLnJlY29tbWVuZGVkLXByb2R1Y3QtYm94X19kZXRhaWxzLWNvbnRhaW5lciB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbiAgLnJlY29tbWVuZGVkLXByb2R1Y3QtYm94X19kZXRhaWxzLWNvbnRhaW5lciA+IGRpdiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbi5yZWNvbW1lbmRlZC1wcm9kdWN0LWJveF9fZGVzY3JpcHRpb24ge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgcGFkZGluZy10b3A6IDAuMjVyZW07XG4gIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XG4gIC1tcy13b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLWJsb2NrLW5vLWR1cGxpY2F0ZS1wcm9wZXJ0aWVzICovXG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIC1tcy1oeXBoZW5zOiBhdXRvO1xuICAgICAgaHlwaGVuczogYXV0bztcbn1cbkBtZWRpYSBhbGwgYW5kICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSksICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSB7XG4gIC5yZWNvbW1lbmRlZC1wcm9kdWN0LWJveF9fZGVzY3JpcHRpb24ge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG4ucmVjb21tZW5kZWQtcHJvZHVjdC1ib3hfX3ByaWNlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG4ucmVjb21tZW5kZWQtcHJvZHVjdC1ib3hfX3ByaWNlIC5wcmljZV9fYW1vdW50IHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLnJlY29tbWVuZGVkLXByb2R1Y3QtYm94X19wcmljZSAucHJpY2VfX2Ftb3VudC1sYWJlbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLnJlY29tbWVuZGVkLXByb2R1Y3QtYm94X19oZWFkZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAtbXMtZmxleC13cmFwOiBub3dyYXA7XG4gICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuLnJlY29tbWVuZGVkLXByb2R1Y3QtYm94X19oZWFkbGluZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXNpemU6IDEuMDY2NjY2NjY2N3JlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XG4gIC1tcy13b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLWJsb2NrLW5vLWR1cGxpY2F0ZS1wcm9wZXJ0aWVzICovXG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIC1tcy1oeXBoZW5zOiBhdXRvO1xuICAgICAgaHlwaGVuczogYXV0bztcbn1cbkBtZWRpYSBhbGwgYW5kICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSksICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSB7XG4gIC5yZWNvbW1lbmRlZC1wcm9kdWN0LWJveF9faGVhZGxpbmUge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG4ucmVjb21tZW5kZWQtcHJvZHVjdC1ib3hfX2dvLXRvLWRldGFpbHMtYnV0dG9uIHtcbiAgLW1zLXdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVjbGFyYXRpb24tYmxvY2stbm8tZHVwbGljYXRlLXByb3BlcnRpZXMgKi9cbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgLW1zLWh5cGhlbnM6IGF1dG87XG4gICAgICBoeXBoZW5zOiBhdXRvO1xuICBkaXNwbGF5OiAtd2Via2l0LWlubGluZS1ib3g7XG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5yZWNvbW1lbmRlZC1wcm9kdWN0LWJveF9faGVhZGxpbmUge1xuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjY7XG4gIH1cbn1cbi5yZWNvbW1lbmRlZC1wcm9kdWN0LWJveCAuYXZhaWxhYmlsaXR5IHtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAtd2Via2l0LWJveC1hbGlnbjogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG59XG4ucmVjb21tZW5kZWQtcHJvZHVjdC1ib3ggLmF2YWlsYWJpbGl0eV9fbGFiZWwge1xuICBtYXJnaW4tbGVmdDogMDtcbiAgbGluZS1oZWlnaHQ6IDI7XG59XG4ucmVjb21tZW5kZWQtcHJvZHVjdC1ib3ggLmVuZXJneS1sYWJlbCB7XG4gIC13ZWJraXQtYm94LXBhY2s6IGxlZnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBsZWZ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogbGVmdDtcbn1cbi5yZWNvbW1lbmRlZC1wcm9kdWN0LWJveCAuZW5lcmd5LWxhYmVsIC5kYXRhLXNoZWV0LWxpbmsge1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucmVjb21tZW5kZWQtcHJvZHVjdC1saXN0aW5nIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG4ucmVjb21tZW5kZWQtcHJvZHVjdC1saXN0aW5nX190b3Age1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xuICBwYWRkaW5nOiAwLjI1cmVtIDFyZW07XG59XG4ucmVjb21tZW5kZWQtcHJvZHVjdC1saXN0aW5nX190b3AtY29udGFpbmVyIHtcbiAgcGFkZGluZzogMCAxcmVtO1xufVxuLnJlY29tbWVuZGVkLXByb2R1Y3QtbGlzdGluZ19faGVhZGxpbmUge1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgLXdlYmtpdC1ib3gtZmxleDogMjtcbiAgICAgIC1tcy1mbGV4OiAyO1xuICAgICAgICAgIGZsZXg6IDI7XG4gIG1pbi13aWR0aDogMDtcbn1cbi5yZWNvbW1lbmRlZC1wcm9kdWN0LWxpc3RpbmdfX3Nob3ctYWxsLWJ1dHRvbi1jb250YWluZXIge1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXg6IDE7XG4gICAgICAgICAgZmxleDogMTtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBlbmQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbn1cbi5yZWNvbW1lbmRlZC1wcm9kdWN0LWxpc3RpbmdfX3Nob3ctYWxsLWJ1dHRvbiB7XG4gIC1tcy13b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLWJsb2NrLW5vLWR1cGxpY2F0ZS1wcm9wZXJ0aWVzICovXG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIC1tcy1oeXBoZW5zOiBhdXRvO1xuICAgICAgaHlwaGVuczogYXV0bztcbiAgbWluLXdpZHRoOiAwO1xufVxuLnJlY29tbWVuZGVkLXByb2R1Y3QtbGlzdGluZ19fcHJvZHVjdHMtY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXg6IDE7XG4gICAgICAgICAgZmxleDogMTtcbn1cbkBtZWRpYSBhbGwgYW5kICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSksICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSB7XG4gIC5yZWNvbW1lbmRlZC1wcm9kdWN0LWxpc3RpbmdfX3Byb2R1Y3RzLWNvbnRhaW5lciB7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4gICAgLW1zLWZsZXgtbmVnYXRpdmU6IDAgIWltcG9ydGFudDtcbiAgICAgICAgZmxleC1zaHJpbms6IDAgIWltcG9ydGFudDtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0byAhaW1wb3J0YW50O1xuICAgICAgICBmbGV4LWJhc2lzOiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgLyogc3R5bGVsaW50LWVuYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1NTBweCkge1xuICAucmVjb21tZW5kZWQtcHJvZHVjdC1saXN0aW5nX19wcm9kdWN0cy1jb250YWluZXIge1xuICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5yZWNvbW1lbmRlZC1wcm9kdWN0LWxpc3RpbmdfX3Byb2R1Y3RzLWNvbnRhaW5lciB7XG4gICAgcGFkZGluZzogMCAxcmVtO1xuICB9XG59XG4ucmVjb21tZW5kZWQtcHJvZHVjdC1saXN0aW5nX19yZWNvbW1lbmRlZC1wcm9kdWN0LWJveC1jb250YWluZXIge1xuICBwYWRkaW5nOiAxcmVtIDAuNXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMCkge1xuICAucmVjb21tZW5kZWQtcHJvZHVjdC1saXN0aW5nX19yZWNvbW1lbmRlZC1wcm9kdWN0LWJveC1jb250YWluZXIge1xuICAgIG1heC13aWR0aDogMTguNjY2NjY2NjY2N3JlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1NTBweCkge1xuICAucmVjb21tZW5kZWQtcHJvZHVjdC1saXN0aW5nX19yZWNvbW1lbmRlZC1wcm9kdWN0LWJveC1jb250YWluZXIge1xuICAgIG1pbi13aWR0aDogMTguNjY2NjY2NjY2N3JlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTFweCkge1xuICAucmVjb21tZW5kZWQtcHJvZHVjdC1saXN0aW5nX19yZWNvbW1lbmRlZC1wcm9kdWN0LWJveC1jb250YWluZXIge1xuICAgIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAgIC1tcy1mbGV4OiAxO1xuICAgICAgICAgICAgZmxleDogMTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xuICAucmVjb21tZW5kZWQtcHJvZHVjdC1saXN0aW5nX19yZWNvbW1lbmRlZC1wcm9kdWN0LWJveC1jb250YWluZXI6Zmlyc3QtY2hpbGQge1xuICAgIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgfVxuICAucmVjb21tZW5kZWQtcHJvZHVjdC1saXN0aW5nX19yZWNvbW1lbmRlZC1wcm9kdWN0LWJveC1jb250YWluZXI6bGFzdC1jaGlsZCB7XG4gICAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucmVjb21tZW5kZWQtcHJvZHVjdC1saXN0aW5nX19yZWNvbW1lbmRlZC1wcm9kdWN0LWJveC1jb250YWluZXIge1xuICAgIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAgIC1tcy1mbGV4OiAxO1xuICAgICAgICAgICAgZmxleDogMTtcbiAgfVxuICAucmVjb21tZW5kZWQtcHJvZHVjdC1saXN0aW5nX19yZWNvbW1lbmRlZC1wcm9kdWN0LWJveC1jb250YWluZXI6Zmlyc3QtY2hpbGQge1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgfVxuICAucmVjb21tZW5kZWQtcHJvZHVjdC1saXN0aW5nX19yZWNvbW1lbmRlZC1wcm9kdWN0LWJveC1jb250YWluZXI6bGFzdC1jaGlsZCB7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgfVxufVxuLnJlY29tbWVuZGVkLXByb2R1Y3QtbGlzdGluZ19fcmVjb21tZW5kZWQtcHJvZHVjdC1ib3gge1xuICBoZWlnaHQ6IDEwMCU7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5zY3JvbGwtdG8tdG9wIHtcbiAgLXdlYmtpdC1ib3gtcGFjazogZW5kO1xuICAgICAgLW1zLWZsZXgtcGFjazogZW5kO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIGRpc3BsYXk6IC13ZWJraXQtaW5saW5lLWJveDtcbiAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94O1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAxMDAlO1xuICBwYWRkaW5nOiAxcmVtO1xuICB6LWluZGV4OiA3MDA7XG59XG5AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpLCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSkge1xuICAuc2Nyb2xsLXRvLXRvcCB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHJpZ2h0OiAwO1xuICAgIGxlZnQ6IDA7XG4gIH1cbiAgLnNjcm9sbC10by10b3AgLmxhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgIGNvbG9yOiAjNGI0YjRkO1xuICAgIHBhZGRpbmc6IDAuMjVyZW07XG4gIH1cbiAgLnNjcm9sbC10by10b3AgLmxhYmVsIHN2ZyB7XG4gICAgZmlsbDogIzRiNGI0ZDtcbiAgfVxufVxuLnNjcm9sbC10by10b3BfX3Njcm9sbC11cCB7XG4gIHdpZHRoOiBhdXRvO1xuICBoZWlnaHQ6IGF1dG87XG59XG4uc2Nyb2xsLXRvLXRvcCAubGFiZWwge1xuICBkaXNwbGF5OiBub25lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxNDAwcHgpIHtcbiAgLnNjcm9sbC10by10b3AgLmxhYmVsIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuLnNjcm9sbC10by10b3AgLnN2ZyB7XG4gIHdpZHRoOiAycmVtO1xuICBoZWlnaHQ6IDJyZW07XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5zZWxlY3QtYnV0dG9uIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLnNlbGVjdC1idXR0b24gLnF1YW50aXR5LWlucHV0LXNlbGVjdCB7XG4gIGhlaWdodDogYXV0bztcbn1cbi5zZWxlY3QtYnV0dG9uIC5xdWFudGl0eS1pbnB1dC1zZWxlY3QgLnNlbGVjdCB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDEwcHg7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDEwcHg7XG59XG4uc2VsZWN0LWJ1dHRvbiAuYnV0dG9uIHtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDEwcHg7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxMHB4O1xufVxuLnNlbGVjdC1idXR0b24gLmlucHV0IHtcbiAgLXdlYmtpdC1ib3gtZmxleDogMjtcbiAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAyO1xuICAgICAgICAgIGZsZXgtZ3JvdzogMjtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMTBweDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMTBweDtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyogU2xpZGVyICovXG4uc2xpY2stc2xpZGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgLW1zLXRvdWNoLWFjdGlvbjogcGFuLXk7XG4gIHRvdWNoLWFjdGlvbjogcGFuLXk7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi5zbGljay1saXN0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuLnNsaWNrLWxpc3Q6Zm9jdXMge1xuICBvdXRsaW5lOiBub25lO1xufVxuLnNsaWNrLWxpc3QuZHJhZ2dpbmcge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGN1cnNvcjogaGFuZDtcbn1cblxuLnNsaWNrLXNsaWRlciAuc2xpY2stdHJhY2ssXG4uc2xpY2stc2xpZGVyIC5zbGljay1saXN0IHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xufVxuXG4uc2xpY2stdHJhY2sge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG59XG4uc2xpY2stdHJhY2s6YmVmb3JlLCAuc2xpY2stdHJhY2s6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cbi5zbGljay10cmFjazphZnRlciB7XG4gIGNsZWFyOiBib3RoO1xufVxuLnNsaWNrLWxvYWRpbmcgLnNsaWNrLXRyYWNrIHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuXG4uc2xpY2stc2xpZGUge1xuICBmbG9hdDogbGVmdDtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtaW4taGVpZ2h0OiAxcHg7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5bZGlyPXJ0bF0gLnNsaWNrLXNsaWRlIHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuLnNsaWNrLXNsaWRlIGltZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLnNsaWNrLXNsaWRlLnNsaWNrLWxvYWRpbmcgaW1nIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5zbGljay1zbGlkZS5kcmFnZ2luZyBpbWcge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbi5zbGljay1pbml0aWFsaXplZCAuc2xpY2stc2xpZGUge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5zbGljay1sb2FkaW5nIC5zbGljay1zbGlkZSB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cbi5zbGljay12ZXJ0aWNhbCAuc2xpY2stc2xpZGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgaGVpZ2h0OiBhdXRvO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cblxuLnNsaWNrLWFycm93LnNsaWNrLWhpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5zbGljay1jYXJvdXNlbF9fY29udGFpbmVyIHtcbiAgbWF4LWhlaWdodDogMjYuMjY2NjY2NjY2N3JlbTtcbiAgb3BhY2l0eTogMDtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuNXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC41cyBlYXNlLWluLW91dDtcbn1cbi5zbGljay1jYXJvdXNlbF9fY29udGFpbmVyLS1pcy1pbml0ZWQge1xuICBvcGFjaXR5OiAxO1xuICBtYXgtaGVpZ2h0OiBub25lO1xufVxuLnNsaWNrLWNhcm91c2VsIC5zbGljay10cmFjayxcbi5zbGljay1jYXJvdXNlbCAuc2xpY2stbGlzdCB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kZWxheTogMjUwbXM7XG4gICAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogMjUwbXM7XG59XG4uc2xpY2stY2Fyb3VzZWwgLnNsaWNrLXNsaWRlIGltZy5pcy1oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lO1xufVxuLnNsaWNrLWNhcm91c2VsLS1mdWxsLXdpZHRoIHtcbiAgbWFyZ2luLWxlZnQ6IC0xNXB4O1xuICBtYXJnaW4tcmlnaHQ6IC0xNXB4O1xufVxuLnNsaWNrLWNhcm91c2VsLS1mdWxsLXdpZHRoLnNsaWNrLWNhcm91c2VsLS1lcXVhbC1oZWlnaHQge1xuICBtYXJnaW4tbGVmdDogLTAuNnJlbTtcbiAgbWFyZ2luLXJpZ2h0OiAtMC42cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc2xpY2stY2Fyb3VzZWwtLWZ1bGwtd2lkdGguc2xpY2stY2Fyb3VzZWwtLWVxdWFsLWhlaWdodCB7XG4gICAgbWFyZ2luLWxlZnQ6IC0xNXB4O1xuICAgIG1hcmdpbi1yaWdodDogLTE1cHg7XG4gIH1cbn1cbi5zbGljay1jYXJvdXNlbC0tZnVsbC13aWR0aC5zbGljay1jYXJvdXNlbC0tZXF1YWwtaGVpZ2h0Om5vdCguc2xpY2stY2Fyb3VzZWwtLWxpc3RpbmcpIHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIGFuZCAobWF4LXdpZHRoOiAxMjU5cHgpIHtcbiAgLnNsaWNrLWNhcm91c2VsLS1mdWxsLXdpZHRoLnNsaWNrLWNhcm91c2VsLS1lcXVhbC1oZWlnaHQ6bm90KC5zbGljay1jYXJvdXNlbC0tbGlzdGluZykge1xuICAgIG1hcmdpbi1sZWZ0OiAycmVtO1xuICAgIG1hcmdpbi1yaWdodDogMnJlbTtcbiAgfVxuICAuc2xpY2stY2Fyb3VzZWwtLWZ1bGwtd2lkdGguc2xpY2stY2Fyb3VzZWwtLWVxdWFsLWhlaWdodDpub3QoLnNsaWNrLWNhcm91c2VsLS1saXN0aW5nKSAuc2xpY2stcHJldiB7XG4gICAgbGVmdDogLTJyZW07XG4gIH1cbiAgLnNsaWNrLWNhcm91c2VsLS1mdWxsLXdpZHRoLnNsaWNrLWNhcm91c2VsLS1lcXVhbC1oZWlnaHQ6bm90KC5zbGljay1jYXJvdXNlbC0tbGlzdGluZykgLnNsaWNrLW5leHQge1xuICAgIHJpZ2h0OiAtMnJlbTtcbiAgfVxufVxuLnNsaWNrLWNhcm91c2VsLS1mdWxsLXdpZHRoLnNsaWNrLWNhcm91c2VsLS1wcm9kdWN0LWZhbWlseSB7XG4gIG1hcmdpbjogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5zbGljay1jYXJvdXNlbC0tZnVsbC13aWR0aC5zbGljay1jYXJvdXNlbC0tcHJvZHVjdC1mYW1pbHkge1xuICAgIG1hcmdpbjogMCAwLjVyZW07XG4gIH1cbn1cbi5zbGljay1jYXJvdXNlbC0tZXF1YWwtaGVpZ2h0IC5zbGljay10cmFjayB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5zbGljay1jYXJvdXNlbC0tZXF1YWwtaGVpZ2h0IC5zbGljay1zbGlkZSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXJnaW46IDAgMC42cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc2xpY2stY2Fyb3VzZWwtLWVxdWFsLWhlaWdodCAuc2xpY2stc2xpZGUge1xuICAgIG1hcmdpbjogMCAxNXB4O1xuICB9XG59XG4uc2xpY2stY2Fyb3VzZWwtLWVxdWFsLWhlaWdodCAuc2xpY2stc2xpZGUgPiBkaXYge1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xufVxuLnNsaWNrLWNhcm91c2VsLS1zdHJldGNoIC5zbGljay1zbGlkZSB7XG4gIG1hcmdpbjogMDtcbn1cbi5zbGljay1jYXJvdXNlbC0tc3RyZXRjaCAuc2xpY2stbGlzdCB7XG4gIHBhZGRpbmc6IDAgMTVweDtcbn1cbi5zbGljay1jYXJvdXNlbC0tcHJvZHVjdC1zZXQge1xuICBtYXJnaW46IDAgLTAuNjY2NjY2NjY2N3JlbTtcbn1cbi5zbGljay1jYXJvdXNlbC0tcHJvZHVjdC1zZXQgLnNsaWNrLXNsaWRlIHtcbiAgbWFyZ2luOiAwIDAuNjY2NjY2NjY2N3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnNsaWNrLWNhcm91c2VsLS1wcm9kdWN0LXNldCB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG4gIC5zbGljay1jYXJvdXNlbC0tcHJvZHVjdC1zZXQgLnNsaWNrLXNsaWRlIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cbi5zbGljay1jYXJvdXNlbC0tcHJvZHVjdC1zZXQtd2lkZ2V0IC5zbGljay1zbGlkZSB7XG4gIG1pbi1oZWlnaHQ6IDI2LjY2NjY2NjY2NjdyZW07XG4gIHdpZHRoOiAxOC42NjY2NjY2NjY3cmVtO1xuICBtYXJnaW46IDAgMC42NjY2NjY2NjY3cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc2xpY2stY2Fyb3VzZWwtLXByb2R1Y3Qtc2V0LXdpZGdldCAuc2xpY2stc2xpZGUge1xuICAgIG1hcmdpbjogMCAxNXB4O1xuICB9XG59XG4uc2xpY2stY2Fyb3VzZWwtLWNyb3NzLXNlbGxpbmcgLnNsaWNrLXNsaWRlIHtcbiAgbWFyZ2luOiAwIDAuNjY2NjY2NjY2N3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5zbGljay1jYXJvdXNlbC0tcHJvZHVjdC1mYW1pbHkge1xuICAgIG1hcmdpbjogMCAwLjVyZW07XG4gIH1cbn1cbi5zbGljay1jYXJvdXNlbC0tcHJvZHVjdC1mYW1pbHkgLnNsaWNrLXRyYWNrIHtcbiAgbWFyZ2luOiAwO1xufVxuLnNsaWNrLWNhcm91c2VsLS1wcm9kdWN0LWZhbWlseSAuc2xpY2stZG90cyBsaSB7XG4gIGJvcmRlci1jb2xvcjogIzkyOTI5MjtcbiAgYmFja2dyb3VuZDogIzkyOTI5Mjtcbn1cbi5zbGljay1jYXJvdXNlbC0tanVtYm90cm9uIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1pbi1oZWlnaHQ6IDI2cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc2xpY2stY2Fyb3VzZWwtLWp1bWJvdHJvbiB7XG4gICAgbWluLWhlaWdodDogMzMuNjY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLnNsaWNrLWNhcm91c2VsLS1qdW1ib3Ryb24gLnNsaWNrLXNsaWRlIHtcbiAgbWFyZ2luOiAwIDAuMDY2NjY2NjY2N3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnNsaWNrLWNhcm91c2VsLS1qdW1ib3Ryb24gLnNsaWNrLXNsaWRlIHtcbiAgICBtYXJnaW4tbGVmdDogMC4zMzMzMzMzMzMzcmVtO1xuICAgIG1hcmdpbi1yaWdodDogMC4zMzMzMzMzMzMzcmVtO1xuICB9XG59XG4uc2xpY2stY2Fyb3VzZWwtLWp1bWJvdHJvbiAuc2xpY2stZG90cyB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW4tdG9wOiAxLjJyZW07XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIC8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnNsaWNrLWNhcm91c2VsLS1qdW1ib3Ryb24gLnNsaWNrLWRvdHMge1xuICAgIG1hcmdpbi10b3A6IDEuNnJlbTtcbiAgfVxufVxuLnNsaWNrLWNhcm91c2VsLS1qdW1ib3Ryb24gLnNsaWNrLWRvdHMgbGkge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW46IDAgMC40cmVtO1xuICB3aWR0aDogMC42NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDAuNjY2NjY2NjY2N3JlbTtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBmb250LXNpemU6IDA7XG59XG4uc2xpY2stY2Fyb3VzZWwtLWp1bWJvdHJvbiAuc2xpY2stZG90cyBsaTo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIHdpZHRoOiAwLjMzMzMzMzMzMzNyZW07XG4gIGhlaWdodDogMC4zMzMzMzMzMzMzcmVtO1xuICBiYWNrZ3JvdW5kOiAjZGFkYWRhO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zbGljay1jYXJvdXNlbC0tanVtYm90cm9uIC5zbGljay1kb3RzIGxpIHtcbiAgICBtYXJnaW4tdG9wOiAwLjNyZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMC4zcmVtO1xuICB9XG59XG4uc2xpY2stY2Fyb3VzZWwtLWp1bWJvdHJvbiAuc2xpY2stZG90cyBsaTpob3ZlciB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5zbGljay1jYXJvdXNlbC0tanVtYm90cm9uIC5zbGljay1kb3RzIGxpLnNsaWNrLWFjdGl2ZTo6YWZ0ZXIge1xuICB3aWR0aDogMC42NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDAuNjY2NjY2NjY2N3JlbTtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgYm9yZGVyOiAycHggc29saWQgIzkyOTI5Mjtcbn1cbi5zbGljay1jYXJvdXNlbCAuc2xpY2stZG90cyB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW4tdG9wOiAxLjJyZW07XG59XG4uc2xpY2stY2Fyb3VzZWwgLnNsaWNrLWRvdHMgbGkge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAwIDAuNXJlbTtcbiAgd2lkdGg6IDAuMzMzMzMzMzMzM3JlbTtcbiAgaGVpZ2h0OiAwLjMzMzMzMzMzMzNyZW07XG4gIGJhY2tncm91bmQ6ICNkYWRhZGE7XG4gIGJvcmRlci13aWR0aDogMC4zMzMzMzMzMzMzcmVtO1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICNlY2VjZWM7XG4gIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgZm9udC1zaXplOiAwO1xufVxuLnNsaWNrLWNhcm91c2VsIC5zbGljay1kb3RzIGxpOmhvdmVyIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLnNsaWNrLWNhcm91c2VsIC5zbGljay1kb3RzIGxpLnNsaWNrLWFjdGl2ZSB7XG4gIHdpZHRoOiAwLjY2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMC42NjY2NjY2NjY3cmVtO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBib3JkZXItd2lkdGg6IDAuNDY2NjY2NjY2N3JlbTtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjZmVjYzAwO1xufVxuLnNsaWNrLWNhcm91c2VsIC5zbGljay1hcnJvdyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA2LjMzMzMzMzMzMzNyZW07XG4gIGZvbnQtc2l6ZTogMDtcbiAgd2lkdGg6IDJyZW07XG4gIGhlaWdodDogMnJlbTtcbiAgYmFja2dyb3VuZC1zaXplOiAxcmVtO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIHotaW5kZXg6IDM1MDtcbiAgb3BhY2l0eTogMC41O1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zbGljay1jYXJvdXNlbCAuc2xpY2stYXJyb3cge1xuICAgIG1hcmdpbi10b3A6IC0ycmVtO1xuICAgIHRvcDogNTAlO1xuICB9XG59XG4uc2xpY2stY2Fyb3VzZWwgLnNsaWNrLWFycm93OmhvdmVyIHtcbiAgb3BhY2l0eTogMTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLnNsaWNrLWNhcm91c2VsIC5zbGljay1hcnJvdyAuaWNvbi0tY2FyZXQtcmlnaHQge1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5zbGljay1jYXJvdXNlbCAuc2xpY2stYXJyb3cgLmljb24tLWNhcmV0LWxlZnQge1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG4uc2xpY2stY2Fyb3VzZWwgLnNsaWNrLXByZXYge1xuICBsZWZ0OiAwLjZyZW07XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc2xpY2stY2Fyb3VzZWwgLnNsaWNrLXByZXYge1xuICAgIGxlZnQ6IDFyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTI2MHB4KSB7XG4gIC5zbGljay1jYXJvdXNlbCAuc2xpY2stcHJldiB7XG4gICAgbGVmdDogLTJyZW07XG4gIH1cbn1cbi5zbGljay1jYXJvdXNlbCAuc2xpY2stbmV4dCB7XG4gIHJpZ2h0OiAwLjZyZW07XG4gIG1hcmdpbi10b3A6IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5zbGljay1jYXJvdXNlbCAuc2xpY2stbmV4dCB7XG4gICAgbWFyZ2luLXRvcDogLTFyZW07XG4gICAgcmlnaHQ6IDFyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTI2MHB4KSB7XG4gIC5zbGljay1jYXJvdXNlbCAuc2xpY2stbmV4dCB7XG4gICAgcmlnaHQ6IC0ycmVtO1xuICB9XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5zb2NpYWwtc2hhcmUge1xuICBwYWRkaW5nLXRvcDogMS4zMzMzMzMzMzMzcmVtO1xufVxuLnNvY2lhbC1zaGFyZV9fdGV4dCB7XG4gIGNvbG9yOiAjMDAwO1xuICBwYWRkaW5nLXJpZ2h0OiAxLjMzMzMzMzMzMzNyZW07XG4gIGxpbmUtaGVpZ2h0OiAzcmVtO1xufVxuLnNvY2lhbC1zaGFyZV9fbWFpbCAuaWNvbi1idXR0b25fX2ljb246OmJlZm9yZSwgLnNvY2lhbC1zaGFyZV9fZmFjZWJvb2sgLmljb24tYnV0dG9uX19pY29uOjpiZWZvcmUsIC5zb2NpYWwtc2hhcmVfX3R3aXR0ZXIgLmljb24tYnV0dG9uX19pY29uOjpiZWZvcmUge1xuICBmb250LXNpemU6IDEuNXJlbTtcbn1cbi5zb2NpYWwtc2hhcmUgLmljb24tYnV0dG9uX19pY29uIHtcbiAgd2lkdGg6IDNyZW07XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb250ZW50LWVsZW1lbnQge1xuICBtYXJnaW4tYm90dG9tOiAycmVtO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4udGFiIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLnRhYjpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBib3JkZXItYm90dG9tLXdpZHRoOiAycHg7XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItY29sb3I6ICNlY2VjZWM7XG4gIH1cbn1cbi50YWI6OmJlZm9yZSB7XG4gIGhlaWdodDogMy41cmVtO1xuICBsaW5lLWhlaWdodDogMy41cmVtO1xuICBmb250LXNpemU6IDEuNDY2NjY2NjY2N3JlbTtcbn1cbi50YWI6OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXRpdGxlKTtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDFyZW0gMDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMnJlbTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLnRhYl9fdGV4dCB7XG4gIG9wYWNpdHk6IDA7XG4gIGhlaWdodDogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnRhYl9fdGV4dCB7XG4gICAgb3BhY2l0eTogMTtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgcGFkZGluZzogMS41cmVtO1xuICB9XG59XG4udGFiLmFjdGl2ZSAudGFiX190ZXh0IHtcbiAgb3BhY2l0eTogMTtcbiAgaGVpZ2h0OiBhdXRvO1xuICBwYWRkaW5nLWJvdHRvbTogMS41cmVtO1xufVxuLnRhYi5hY3RpdmU6OmJlZm9yZSB7XG4gIGZvbnQtc2l6ZTogMS42NjY2NjY2NjY3cmVtO1xuICBsaW5lLWhlaWdodDogMy44cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAudGFiIHtcbiAgICBib3JkZXItd2lkdGg6IDFweDtcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbiAgfVxuICAudGFiOjpiZWZvcmUsIC50YWI6OmFmdGVyIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi50YWJsZS1hY3Rpb24tbGlzdCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZy10b3A6IDE1cHg7XG4gIHBhZGRpbmctYm90dG9tOiA5cHg7XG4gIG1hcmdpbjogMCAtMC4yNjY2NjY2NjY3cmVtO1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC50YWJsZS1hY3Rpb24tbGlzdCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiAwO1xuICAgIC13ZWJraXQtYm94LXBhY2s6IGVuZDtcbiAgICAgICAgLW1zLWZsZXgtcGFjazogZW5kO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgfVxufVxuLnRhYmxlLWFjdGlvbi1saXN0LS1zaG9wcGluZy1saXN0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxYTE3MWI7XG4gIHBhZGRpbmc6IDAuNnJlbSAxLjMzMzMzMzMzMzNyZW07XG4gIG1hcmdpbjogMC41MzMzMzMzMzMzcmVtIDAgMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnRhYmxlLWFjdGlvbi1saXN0LS1zaG9wcGluZy1saXN0IHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIH1cbn1cbi50YWJsZS1hY3Rpb24tbGlzdF9faW5uZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgbWFyZ2luOiAwIC0wLjI2NjY2NjY2NjdyZW07XG59XG4udGFibGUtYWN0aW9uLWxpc3RfX2l0ZW0ge1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXgtcG9zaXRpdmU6IDE7XG4gICAgICAgICAgZmxleC1ncm93OiAxO1xuICBwYWRkaW5nOiAwIDAuMjY2NjY2NjY2N3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnRhYmxlLWFjdGlvbi1saXN0X19pdGVtIHtcbiAgICAtd2Via2l0LWJveC1mbGV4OiAwO1xuICAgICAgICAtbXMtZmxleC1wb3NpdGl2ZTogMDtcbiAgICAgICAgICAgIGZsZXgtZ3JvdzogMDtcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4udGV4dC1maWVsZCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi50ZXh0LWZpZWxkX19pbnB1dCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLnRleHQtZmllbGRfX2lucHV0LS1mb2N1cy1ib3JkZXItbWFpbjpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogI2ZlY2MwMDtcbn1cbi50ZXh0LWZpZWxkX19pbnB1dC0tZXJyb3Ige1xuICBib3JkZXItY29sb3I6ICNlMzIyMTM7XG59XG4udGV4dC1maWVsZF9fbGFiZWwge1xuICBjb2xvcjogI2IyYjJiMjtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMS4zMzMzMzMzMzMzcmVtLCAwLjkzMzMzMzMzMzNyZW0pO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEuMzMzMzMzMzMzM3JlbSwgMC45MzMzMzMzMzMzcmVtKTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xvciAyMDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSAwbXMsIC13ZWJraXQtdHJhbnNmb3JtIDIwMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIDBtcztcbiAgdHJhbnNpdGlvbjogY29sb3IgMjAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkgMG1zLCAtd2Via2l0LXRyYW5zZm9ybSAyMDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSAwbXM7XG4gIHRyYW5zaXRpb246IGNvbG9yIDIwMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIDBtcywgdHJhbnNmb3JtIDIwMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIDBtcztcbiAgdHJhbnNpdGlvbjogY29sb3IgMjAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkgMG1zLCB0cmFuc2Zvcm0gMjAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkgMG1zLCAtd2Via2l0LXRyYW5zZm9ybSAyMDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSAwbXM7XG59XG4udGV4dC1maWVsZC0taGFzLXZhbHVlIC50ZXh0LWZpZWxkX19sYWJlbCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMS4zMzMzMzMzMzMzcmVtLCAtMC42cmVtKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxLjMzMzMzMzMzMzNyZW0sIC0wLjZyZW0pO1xufVxuLnRleHQtZmllbGQtLWZvY3Vzc2VkIC50ZXh0LWZpZWxkX19sYWJlbCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMS4zMzMzMzMzMzMzcmVtLCAtMC42cmVtKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxLjMzMzMzMzMzMzNyZW0sIC0wLjZyZW0pO1xufVxuLnRleHQtZmllbGQtLWZvY3Vzc2VkIC50ZXh0LWZpZWxkX19sYWJlbC0tZm9jdXMtYm9yZGVyLW1haW4ge1xuICBjb2xvcjogI2ZlY2MwMDtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnRvZ2dsZS1oZWFkbGluZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDtcbiAgd2lkdGg6IDEwMCU7XG59XG4udG9nZ2xlLWhlYWRsaW5lX19jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG59XG4udG9nZ2xlLWhlYWRsaW5lX190aXRsZSB7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLnRvZ2dsZS1oZWFkbGluZV9fcmVtb3ZlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi50b2dnbGUtaGVhZGxpbmUuYWN0aXZlIC50b2dnbGUtaGVhZGxpbmVfX2FkZCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4udG9nZ2xlLWhlYWRsaW5lLmFjdGl2ZSAudG9nZ2xlLWhlYWRsaW5lX19yZW1vdmUge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4udG9nZ2xlLWhlYWRsaW5lIC5pY29uIHN2ZyB7XG4gIGZpbGw6ICMwMDA7XG4gIHdpZHRoOiAwLjkzMzMzMzMzMzNyZW07XG4gIGhlaWdodDogMS42NjY2NjY2NjY3cmVtO1xufVxuLnRvZ2dsZS1oZWFkbGluZSAuaWNvbi0tYWRkIHN2Zyxcbi50b2dnbGUtaGVhZGxpbmUgLmljb24tLXJlbW92ZSBzdmcge1xuICBoZWlnaHQ6IDAuOTMzMzMzMzMzM3JlbTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnRvZ2dsZS1zd2l0Y2gge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG59XG4udG9nZ2xlLXN3aXRjaF9fbGFiZWwge1xuICBtYXJnaW4tcmlnaHQ6IDFyZW07XG59XG4udG9nZ2xlLXN3aXRjaCBpbnB1dFt0eXBlPWNoZWNrYm94XSB7XG4gIGhlaWdodDogMDtcbiAgd2lkdGg6IDA7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cbi50b2dnbGUtc3dpdGNoIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyBsYWJlbCB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLnRvZ2dsZS1zd2l0Y2ggaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIGxhYmVsOjphZnRlciB7XG4gIGxlZnQ6IDEwMCU7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVjYzAwO1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi50b2dnbGUtc3dpdGNoIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyBsYWJlbDo6YWZ0ZXIgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi50b2dnbGUtc3dpdGNoIGxhYmVsIHtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWluZGVudDogLTk5OTlweDtcbiAgd2lkdGg6IDIuNjY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAwLjhyZW07XG4gIGJhY2tncm91bmQtY29sb3I6ICNkMGQwZDA7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGluZS1oZWlnaHQ6IDAuOHJlbTtcbn1cbi50b2dnbGUtc3dpdGNoIGxhYmVsIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4udG9nZ2xlLXN3aXRjaCBsYWJlbDo6YWZ0ZXIge1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4yKSAwIDFweCAycHggMDtcbiAgICAgICAgICBib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMikgMCAxcHggMnB4IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNiMmIyYjI7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtMC4zMzMzMzMzMzMzcmVtO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMS40NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDEuNDY2NjY2NjY2N3JlbTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiAwLjNzO1xuICB0cmFuc2l0aW9uOiAwLjNzO1xufVxuLnRvZ2dsZS1zd2l0Y2ggbGFiZWw6YWN0aXZlOjphZnRlciB7XG4gIHdpZHRoOiAycmVtO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4udG9vbHRpcC1idXR0b24ge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi50b29sdGlwLWJ1dHRvbl9fdG9vbHRpcC1jb250YWluZXIge1xuICAtd2Via2l0LWJveC1wYWNrOiBlbmQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAxO1xuICBib3R0b206IDJyZW07XG4gIHJpZ2h0OiAwO1xuICB3aWR0aDogMjByZW07XG59XG4udG9vbHRpcC1idXR0b25fX3Rvb2x0aXAge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4yKSAwIDFweCAycHggMDtcbiAgICAgICAgICBib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMikgMCAxcHggMnB4IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDAuNXJlbTtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLnRvb2x0aXAtYnV0dG9uX190b29sdGlwIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4udG9vbHRpcC1idXR0b25fX3Rvb2x0aXA6OmFmdGVyIHtcbiAgYm9yZGVyLXdpZHRoOiAwLjQ2NjY2NjY2NjdyZW07XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2ZmZiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IC0wLjg2NjY2NjY2NjdyZW07XG4gIHJpZ2h0OiAwLjhyZW07XG59XG4udG9vbHRpcC1idXR0b25fX3Rvb2x0aXAgbGkge1xuICBtYXJnaW4tbGVmdDogMXJlbTtcbn1cbi50b29sdGlwLWJ1dHRvbiBidXR0b24ge1xuICBtaW4td2lkdGg6IDIuNjY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiBtZWRpdW0tYmlnLzE1cmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbi50b29sdGlwLWJ1dHRvbiBidXR0b24gLmljb24ge1xuICBjdXJzb3I6IGF1dG87XG4gIGxpbmUtaGVpZ2h0OiAxO1xufVxuLnRvb2x0aXAtYnV0dG9uIGJ1dHRvbiBzdmcge1xuICB3aWR0aDogMS42NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDEuNjY2NjY2NjY2N3JlbTtcbn1cbi50b29sdGlwLWJ1dHRvbiBidXR0b24udG9vbHRpcC1idXR0b25fX21vZGFsLXRyaWdnZXIgLmljb24ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4udG9vbHRpcC1idXR0b24gZGl2LnRvb2x0aXAtYnV0dG9uX19tb2RhbC10cmlnZ2VyIC5pY29uIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuYnV0dG9uOmhvdmVyICsgLnRvb2x0aXAtYnV0dG9uX190b29sdGlwLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG5kaXY6aG92ZXIgKyAudG9vbHRpcC1idXR0b25fX3Rvb2x0aXAtY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi50b29sdGlwLWJ1dHRvbi0tY2VudGVyIC50b29sdGlwLWJ1dHRvbl9fdG9vbHRpcC1jb250YWluZXIge1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiAwO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNDElKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTQxJSk7XG59XG4udG9vbHRpcC1idXR0b24tLWNlbnRlciAudG9vbHRpcC1idXR0b25fX3Rvb2x0aXA6OmFmdGVyIHtcbiAgcmlnaHQ6IDUwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzc0cHgpIHtcbiAgLnRvb2x0aXAtYnV0dG9uLS1jZW50ZXIgLnRvb2x0aXAtYnV0dG9uX190b29sdGlwLWNvbnRhaW5lciB7XG4gICAgd2lkdGg6IDE1cmVtO1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0zOCUpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0zOCUpO1xuICB9XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi51c2VyLWNlbnRyaWNzLWdvb2dsZW1hcHMtb3ZlcmxheSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBoZWlnaHQ6IDEwMCU7XG59XG4udXNlci1jZW50cmljcy1nb29nbGVtYXBzLW92ZXJsYXlfX2NvbnRhaW5lciB7XG4gIHdpZHRoOiA3NSU7XG59XG4udXNlci1jZW50cmljcy1nb29nbGVtYXBzLW92ZXJsYXlfX2FjY2VwdC1idXR0b24ge1xuICBqdXN0aWZ5LXNlbGY6IGZsZXgtZW5kO1xuICBtYXJnaW4tdG9wOiAxcmVtO1xufVxuLnVzZXItY2VudHJpY3MtZ29vZ2xlbWFwcy1vdmVybGF5X190ZXh0IGEge1xuICBmb250LXdlaWdodDogNzAwO1xufVxuLnVzZXItY2VudHJpY3MtZ29vZ2xlbWFwcy1vdmVybGF5X19idXR0b24tY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBlbmQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbn1cbi51c2VyLWNlbnRyaWNzLWdvb2dsZW1hcHMtb3ZlcmxheSAuaXMtaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50LG1heC1uZXN0aW5nLWRlcHRoICovXG4udXNlci1uYXZpZ2F0aW9uIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAtd2Via2l0LWJveC1wYWNrOiBlbmQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnVzZXItbmF2aWdhdGlvbiB7XG4gICAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgfVxufVxuLnVzZXItbmF2aWdhdGlvbl9fbG9nb3V0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLnVzZXItbmF2aWdhdGlvbl9fY29udGFjdC1idXR0b24ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi10b3A6IDAuNzVyZW07XG59XG4udXNlci1uYXZpZ2F0aW9uX19pdGVtIHtcbiAgd2lkdGg6IGF1dG87XG4gIG1heC13aWR0aDogN3JlbTtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAudXNlci1uYXZpZ2F0aW9uX19pdGVtIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgcGFkZGluZy1ib3R0b206IDAuNjY2NjY2NjY2N3JlbTtcbiAgICB6LWluZGV4OiAzO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAudXNlci1uYXZpZ2F0aW9uX19pdGVtIHtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC51c2VyLW5hdmlnYXRpb25fX2l0ZW06bm90KDpmaXJzdC1jaGlsZCkge1xuICAgIG1hcmdpbi1sZWZ0OiAxLjI1cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OXB4KSBhbmQgKG1pbi1oZWlnaHQ6IDUwMXB4KSB7XG4gIC51c2VyLW5hdmlnYXRpb25fX2l0ZW06aG92ZXIgLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi11c2VyLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdiB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgc2NhbGUoMSk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuICAudXNlci1uYXZpZ2F0aW9uX19pdGVtOmhvdmVyIC51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtdXNlci51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtLXB1bGwtbGVmdCB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgc2NhbGUoMSk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgc2NhbGUoMSk7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY5cHgpIGFuZCAobWluLWhlaWdodDogNTAxcHgpIHtcbiAgLnVzZXItbmF2aWdhdGlvbl9faXRlbTpub3QoOmhvdmVyKSAudXNlci1uYXZpZ2F0aW9uX19zdWItbmF2IHtcbiAgICAtd2Via2l0LXRyYW5zaXRpb24tZGVsYXk6IDAuNXM7XG4gICAgICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAwLjVzO1xuICAgIHotaW5kZXg6IDI7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY5cHgpIGFuZCAobWluLWhlaWdodDogNTAxcHgpIHtcbiAgLnVzZXItbmF2aWdhdGlvbl9faXRlbTpob3ZlciAudXNlci1uYXZpZ2F0aW9uX19zdWItbmF2IHtcbiAgICAtd2Via2l0LXRyYW5zaXRpb24tZGVsYXk6IDAuMXM7XG4gICAgICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAwLjFzO1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHNjYWxlKDEpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHNjYWxlKDEpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbiAgLnVzZXItbmF2aWdhdGlvbl9faXRlbTpob3ZlciAudXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LS1wdWxsLWxlZnQge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC05MCUpIHNjYWxlKDEpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC05MCUpIHNjYWxlKDEpO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OXB4KSBhbmQgKG1pbi1oZWlnaHQ6IDUwMXB4KSBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC51c2VyLW5hdmlnYXRpb25fX2l0ZW06aG92ZXIgLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi0tcHVsbC1sZWZ0IHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtOTAlKSBzY2FsZSgxKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtOTAlKSBzY2FsZSgxKTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjlweCkgYW5kIChtaW4taGVpZ2h0OiA1MDFweCkgYW5kIChtaW4td2lkdGg6IDE0MDBweCkge1xuICAudXNlci1uYXZpZ2F0aW9uX19pdGVtOmhvdmVyIC51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtLXB1bGwtbGVmdCB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTkwJSkgc2NhbGUoMSk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTkwJSkgc2NhbGUoMSk7XG4gIH1cbn1cbi51c2VyLW5hdmlnYXRpb25fX2l0ZW0tLWRlYWxlciB7XG4gIHdpZHRoOiBhdXRvO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnVzZXItbmF2aWdhdGlvbl9faXRlbS0tc2VhcmNoIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi51c2VyLW5hdmlnYXRpb25fX2l0ZW0tLXNlYXJjaCAuaWNvbi1idXR0b25fX3RleHQge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG4udXNlci1uYXZpZ2F0aW9uX19pdGVtLS1pcy1jYXJ0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLnVzZXItbmF2aWdhdGlvbiAuaWNvbi1idXR0b24ge1xuICB3aWR0aDogYXV0bztcbiAgbWFyZ2luLXJpZ2h0OiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAudXNlci1uYXZpZ2F0aW9uIC5pY29uLWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiAzLjMzMzMzMzMzMzNyZW07XG4gIH1cbn1cbi51c2VyLW5hdmlnYXRpb24gLmljb24tYnV0dG9uX19pY29uIHtcbiAgZm9udC1zaXplOiAycmVtO1xuICB3aWR0aDogM3JlbTtcbn1cbi51c2VyLW5hdmlnYXRpb24gLmljb24tYnV0dG9uX19pY29uLS1iZy1jb2xvci1tYWluIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZlY2MwMDtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4udXNlci1uYXZpZ2F0aW9uIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctY29sb3ItbWFpbiBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLnVzZXItbmF2aWdhdGlvbiAuaWNvbi1idXR0b25fX2ljb24tLXVzZXIge1xuICBwYWRkaW5nLWxlZnQ6IDAuNHJlbTtcbn1cbi51c2VyLW5hdmlnYXRpb24gLmljb24tYnV0dG9uX190ZXh0IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnVzZXItbmF2aWdhdGlvbiAuaWNvbi1idXR0b25fX3RleHQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG4udXNlci1uYXZpZ2F0aW9uIC5pY29uLWJ1dHRvbjpob3ZlciAuaWNvbi1idXR0b25fX2ljb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVjYzAwO1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi51c2VyLW5hdmlnYXRpb24gLmljb24tYnV0dG9uOmhvdmVyIC5pY29uLWJ1dHRvbl9faWNvbiBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLnVzZXItbmF2aWdhdGlvbiAuaWNvbi1idXR0b246aG92ZXIgLmljb24tYnV0dG9uX19pY29uLS1iZy1ob3Zlci1jb2xvci1hbHQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGI0YjRkO1xuICBjb2xvcjogI2ZmZjtcbn1cbi51c2VyLW5hdmlnYXRpb24gLmljb24tYnV0dG9uOmhvdmVyIC5pY29uLWJ1dHRvbl9faWNvbi0tYmctaG92ZXItY29sb3ItYWx0IHN2ZyB7XG4gIGZpbGw6ICNmZmY7XG59XG4udXNlci1uYXZpZ2F0aW9uX190ZXh0IHtcbiAgZGlzcGxheTogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC51c2VyLW5hdmlnYXRpb25fX3RleHQge1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICB9XG59XG4udXNlci1uYXZpZ2F0aW9uX19hcnJvdyB7XG4gIG1hcmdpbjogMXJlbSAwIDAgMC4zMzMzMzMzMzMzcmVtO1xuICB3aWR0aDogMC40NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDAuMjY2NjY2NjY2N3JlbTtcbn1cbi51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtdXNlci51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtLXB1bGwtbGVmdDo6YmVmb3JlIHtcbiAgbGVmdDogMDtcbn1cbi51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtdXNlci51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXY6OmJlZm9yZSB7XG4gIHJpZ2h0OiAwO1xuICB0b3A6IC0wLjUzMzMzMzMzMzNyZW07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4udXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LXVzZXIudXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LXVzZXItbG9nZ2VkLWluIHtcbiAgbWluLXdpZHRoOiAxNHJlbTtcbn1cbi51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtdXNlci51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtdXNlci1ub3QtbG9nZ2VkLWluIHtcbiAgbWluLXdpZHRoOiAxOXJlbTtcbn1cbi51c2VyLW5hdmlnYXRpb25fX2FjdGlvbnMge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gICAgICBmbGV4LXNocmluazogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnVzZXItbmF2aWdhdGlvbl9fYWN0aW9ucyB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAtbXMtZmxleC13cmFwOiBub3dyYXA7XG4gICAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xuICAgIGNvbG9yOiAjNGI0YjRkO1xuICAgIHBhZGRpbmc6IDFyZW0gMC43NXJlbSAwLjc1cmVtO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3R0b206IDA7XG4gIH1cbiAgLnVzZXItbmF2aWdhdGlvbl9fYWN0aW9ucyBzdmcge1xuICAgIGZpbGw6ICM0YjRiNGQ7XG4gIH1cbn1cbi51c2VyLW5hdmlnYXRpb24gLnVzZXItbmF2aWdhdGlvbl9fc2hvdy1hbGwge1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xufVxuLnVzZXItbmF2aWdhdGlvbiAudXNlci1uYXZpZ2F0aW9uX19zaG93LWFsbCAuYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4udXNlci1uYXZpZ2F0aW9uIC51c2VyLW5hdmlnYXRpb25fX3Nob3ctYWxsIC5idXR0b24gc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi51c2VyLW5hdmlnYXRpb24gLnVzZXItbmF2aWdhdGlvbl9fc2hvdy1hbGwgLmJ1dHRvbjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWNjMDA7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLnVzZXItbmF2aWdhdGlvbiAudXNlci1uYXZpZ2F0aW9uX19zaG93LWFsbCAuYnV0dG9uOmhvdmVyIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC51c2VyLW5hdmlnYXRpb24gLnVzZXItbmF2aWdhdGlvbl9fc2hvdy1hbGwge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgbWFyZ2luLXJpZ2h0OiAycmVtO1xuICB9XG59XG4udXNlci1uYXZpZ2F0aW9uIC51c2VyLW5hdmlnYXRpb25fX3Nob3ctY2FydHMge1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xufVxuLnVzZXItbmF2aWdhdGlvbiAudXNlci1uYXZpZ2F0aW9uX19zaG93LWNhcnRzIC5idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi51c2VyLW5hdmlnYXRpb24gLnVzZXItbmF2aWdhdGlvbl9fc2hvdy1jYXJ0cyAuYnV0dG9uIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4udXNlci1uYXZpZ2F0aW9uIC51c2VyLW5hdmlnYXRpb25fX3Nob3ctY2FydHMgLmJ1dHRvbjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZWNjMDA7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLnVzZXItbmF2aWdhdGlvbiAudXNlci1uYXZpZ2F0aW9uX19zaG93LWNhcnRzIC5idXR0b246aG92ZXIgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnVzZXItbmF2aWdhdGlvbiAudXNlci1uYXZpZ2F0aW9uX19zaG93LWNhcnRzIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIG1hcmdpbi1yaWdodDogMnJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1NTBweCkge1xuICAudXNlci1uYXZpZ2F0aW9uIC51c2VyLW5hdmlnYXRpb25fX2FjdGlvbnMge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7XG4gICAgY29sb3I6ICM0YjRiNGQ7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm90dG9tOiAwO1xuICAgIHBhZGRpbmc6IDFyZW0gMnJlbTtcbiAgfVxuICAudXNlci1uYXZpZ2F0aW9uIC51c2VyLW5hdmlnYXRpb25fX2FjdGlvbnMgc3ZnIHtcbiAgICBmaWxsOiAjNGI0YjRkO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KSwgb25seSBzY3JlZW4gYW5kIChtYXgtaGVpZ2h0OiA1MDBweCkge1xuICAudXNlci1uYXZpZ2F0aW9uIC51c2VyLW5hdmlnYXRpb25fX3VzZXItaWNvbiB7XG4gICAgZm9udC1zaXplOiAycmVtO1xuICB9XG4gIC51c2VyLW5hdmlnYXRpb24gLnVzZXItbmF2aWdhdGlvbl9fY2xvc2UtY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgaGVpZ2h0OiAzcmVtO1xuICAgIHBhZGRpbmc6IDFyZW07XG4gIH1cbiAgLnVzZXItbmF2aWdhdGlvbiAudXNlci1uYXZpZ2F0aW9uX19jbG9zZS1jb250YWluZXIgLmljb24tYnV0dG9uX19pY29uIHtcbiAgICBmb250LXNpemU6IDEuMzMzMzMzMzMzM3JlbTtcbiAgfVxuICAudXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi11c2VyIHtcbiAgICBvdmVyZmxvdzogc2Nyb2xsO1xuICAgIGxlZnQ6IDEuNXJlbTtcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gMS41cmVtKTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGhlaWdodDogYXV0bztcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkgYW5kIChtaW4taGVpZ2h0OiA1MDFweCksIG9ubHkgc2NyZWVuIGFuZCAobWF4LWhlaWdodDogNTAwcHgpIGFuZCAobWluLWhlaWdodDogNTAxcHgpIHtcbiAgLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtdXNlciB7XG4gICAgdG9wOiAyLjY2NjY2NjY2NjdyZW07XG4gICAgYm90dG9tOiAyLjY2NjY2NjY2NjdyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpLCBvbmx5IHNjcmVlbiBhbmQgKG1heC1oZWlnaHQ6IDUwMHB4KSB7XG4gIC51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYudXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LXVzZXIgLnVzZXItbmF2aWdhdGlvbl9fY2xvc2UtY29udGFpbmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xuICB9XG4gIC51c2VyLW5hdmlnYXRpb24gLnVzZXItbmF2aWdhdGlvbl9fY2xvc2UtY29udGFpbmVyLWNhcnQsXG4gIC51c2VyLW5hdmlnYXRpb24gLnVzZXItbmF2aWdhdGlvbl9fY2xvc2UtY29udGFpbmVyLWxpc3Qge1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gIH1cbiAgLnVzZXItbmF2aWdhdGlvbiAudXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LWlubmVyIHtcbiAgICBwYWRkaW5nOiAxcmVtO1xuICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC51c2VyLW5hdmlnYXRpb24gLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi1pbm5lci0tbG9nZ2VkLWluIHtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDVyZW0pO1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB9XG4gIC51c2VyLW5hdmlnYXRpb24gLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi1pbm5lci0tbG9nZ2VkLWluIC5uYXZpZ2F0aW9uLXNpZGViYXIge1xuICAgIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAgIC1tcy1mbGV4OiAxO1xuICAgICAgICAgICAgZmxleDogMTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtaGVpZ2h0OiA1MDBweCkge1xuICAudXNlci1uYXZpZ2F0aW9uX19zdWItbmF2IHtcbiAgICB3aWR0aDogMzAlICFpbXBvcnRhbnQ7XG4gICAgbGVmdDogdW5zZXQgIWltcG9ydGFudDtcbiAgICByaWdodDogMDtcbiAgICBvdmVyZmxvdzogc2Nyb2xsICFpbXBvcnRhbnQ7XG4gICAgYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSBhbmQgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtdXNlciB7XG4gICAgbGVmdDogdW5zZXQ7XG4gICAgcmlnaHQ6IDA7XG4gICAgd2lkdGg6IDUwJTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkgYW5kIChtYXgtd2lkdGg6IDc2OHB4KSBhbmQgKG1pbi1oZWlnaHQ6IDUwMXB4KSB7XG4gIC51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYudXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LXVzZXIge1xuICAgIHRvcDogMi42NjY2NjY2NjY3cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSBhbmQgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLnVzZXItbmF2aWdhdGlvbl9fYWN0aW9ucyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbiAgICBjb2xvcjogIzRiNGI0ZDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gICAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAtd2Via2l0LWJveC1wYWNrOiBlbmQ7XG4gICAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvdHRvbTogMDtcbiAgICBwYWRkaW5nOiAxLjVyZW0gMXJlbTtcbiAgfVxuICAudXNlci1uYXZpZ2F0aW9uX19hY3Rpb25zIHN2ZyB7XG4gICAgZmlsbDogIzRiNGI0ZDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtaW4td2lkdGg6IDApIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAudXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi11c2VyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgcGFkZGluZzogMDtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgfVxuICAudXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi11c2VyIC51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtaW5uZXIge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgcGFkZGluZzogMXJlbTtcbiAgfVxuICAudXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi11c2VyIC51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtaW5uZXItLWxvZ2dlZC1pbiB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAtd2Via2l0LWJveC1hbGlnbjogc3RhcnQ7XG4gICAgICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydDtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIGhlaWdodDogY2FsYygxMDAlIC0gNDVweCk7XG4gIH1cbiAgLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtdXNlciAudXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LWlubmVyLS1sb2dnZWQtaW4gLnVzZXItbmF2aWdhdGlvbl9fbG9nb3V0IHtcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiBlbmQ7XG4gICAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kO1xuICB9XG59XG4udXNlci1uYXZpZ2F0aW9uX19sb2dvdXQtY29udGFpbmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAxcmVtO1xufVxuLnVzZXItbmF2aWdhdGlvbl9fbG9nb3V0LWNvbnRhaW5lciBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi1tb2JpbGUtYmFja2Ryb3Age1xuICBiYWNrZ3JvdW5kOiByZ2JhKDExMSwgMTExLCAxMTEsIDAuNyk7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiA0MDA7XG4gIG9wYWNpdHk6IDA7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjlweCkgYW5kIChtaW4taGVpZ2h0OiA1MDFweCkge1xuICAudXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LW1vYmlsZS1iYWNrZHJvcCB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG4udXNlci1uYXZpZ2F0aW9uX19zdWItbmF2IHtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQ6ICNmZmY7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDEuOTM7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAxMzMzMzMzMzNyZW07XG4gIG9wYWNpdHk6IDA7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApO1xuICB6LWluZGV4OiA0MDM7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBpbmhlcml0O1xufVxuLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi0tdG91Y2gtYWN0aXZlIHtcbiAgb3BhY2l0eTogMTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIHBvaW50ZXItZXZlbnRzOiBhbGw7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwMjNweCkge1xuICAudXNlci1uYXZpZ2F0aW9uX19zdWItbmF2Om5vdCgudXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LS10b3VjaC1hY3RpdmUpIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OXB4KSBhbmQgKG1pbi1oZWlnaHQ6IDUwMXB4KSB7XG4gIC51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYge1xuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAyNTBtcyBlYXNlLWluLW91dCwgLXdlYmtpdC10cmFuc2Zvcm0gMjUwbXMgZWFzZS1pbi1vdXQ7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAyNTBtcyBlYXNlLWluLW91dCwgLXdlYmtpdC10cmFuc2Zvcm0gMjUwbXMgZWFzZS1pbi1vdXQ7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIGVhc2UtaW4tb3V0LCBvcGFjaXR5IDI1MG1zIGVhc2UtaW4tb3V0O1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyBlYXNlLWluLW91dCwgb3BhY2l0eSAyNTBtcyBlYXNlLWluLW91dCwgLXdlYmtpdC10cmFuc2Zvcm0gMjUwbXMgZWFzZS1pbi1vdXQ7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMTAwJTtcbiAgICBsZWZ0OiA1MCU7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIG1pbi13aWR0aDogMjguNjY2NjY2NjY2N3JlbTtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSBzY2FsZSgwKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSBzY2FsZSgwKTtcbiAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IHRvcCBjZW50ZXI7XG4gICAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgY2VudGVyO1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAwLjA2NjY2NjY2NjdyZW0gMC4xMzMzMzMzMzMzcmVtIDAgcmdiYSg3NSwgNzUsIDc3LCAwLjIpO1xuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwLjA2NjY2NjY2NjdyZW0gMC4xMzMzMzMzMzMzcmVtIDAgcmdiYSg3NSwgNzUsIDc3LCAwLjIpO1xuICAgIG1hcmdpbi10b3A6IDEuNXJlbTtcbiAgICBtYXgtaGVpZ2h0OiAzMXJlbTtcbiAgfVxuICAudXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LS1wdWxsLWxlZnQ6OmJlZm9yZSB7XG4gICAgbGVmdDogOTUlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OXB4KSBhbmQgKG1pbi1oZWlnaHQ6IDUwMXB4KSBhbmQgKG1pbi13aWR0aDogMTQwMHB4KSB7XG4gIC51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtLXB1bGwtbGVmdDo6YmVmb3JlIHtcbiAgICBsZWZ0OiA5MCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY5cHgpIGFuZCAobWluLWhlaWdodDogNTAxcHgpIHtcbiAgLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdjo6YmVmb3JlIHtcbiAgICBib3JkZXItd2lkdGg6IDFweDtcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogI2QwZDBkMCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjZDBkMGQwO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgY29sb3I6ICM0YjRiNGQ7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAtMC41cmVtO1xuICAgIHJpZ2h0OiAyLjRyZW07XG4gICAgbGVmdDogdW5zZXQ7XG4gICAgd2lkdGg6IDFyZW07XG4gICAgaGVpZ2h0OiAxcmVtO1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuICB9XG4gIC51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXY6OmJlZm9yZSBzdmcge1xuICAgIGZpbGw6ICM0YjRiNGQ7XG4gIH1cbn1cbkBtZWRpYSBhbGwgYW5kICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSksICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnVzZXItbmF2aWdhdGlvbiAudXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LXNob3BwaW5nLWxpc3QsXG4gIC51c2VyLW5hdmlnYXRpb24gLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi1jYXJ0IHtcbiAgICBoZWlnaHQ6IDMwcmVtO1xuICB9XG4gIC51c2VyLW5hdmlnYXRpb24gLnVzZXItbmF2aWdhdGlvbl9fYWN0aW9ucy1pZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICB9XG59XG4udXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LWlubmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcbiAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIHBhZGRpbmc6IDFyZW07XG59XG4udXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LWlubmVyIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4udXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LWlubmVyLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi1pbm5lci0tbG9nZ2VkLWluIHtcbiAgcGFkZGluZzogMDtcbn1cbi51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtaW5uZXItLWJnLWdyZXkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtaW5uZXItLWJnLWdyZXkgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtaW5uZXItLWJvcmRlci10b3Age1xuICBib3JkZXItdG9wLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbiAgbWFyZ2luLXRvcDogMXJlbTtcbiAgcGFkZGluZy10b3A6IDFyZW07XG59XG4udXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LWlubmVyIC5saW5rIHtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4udXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LWlubmVyIC5saW5rOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi1pbm5lciAubmF2aWdhdGlvbi1zaWRlYmFyIHtcbiAgd2lkdGg6IDEwMCU7XG59XG4udXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LWlubmVyIC5sb2FkaW5nLXNwaW5uZXIge1xuICBkaXNwbGF5OiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbn1cbi51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtaW5uZXIubG9hZGluZyB7XG4gIGN1cnNvcjogd2FpdDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi1pbm5lci5sb2FkaW5nIC5sb2FkaW5nLXNwaW5uZXIge1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG4gIGRpc3BsYXk6IC13ZWJraXQtaW5saW5lLWJveDtcbiAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94O1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgcGFkZGluZzogMCAwLjVyZW0gMCAxcmVtO1xufVxuLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi1pbm5lci5sb2FkaW5nIC5sb2FkaW5nLXNwaW5uZXJfX2RvdCB7XG4gIHRvcDogLTAuM3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi1pbm5lciB7XG4gICAgLXdlYmtpdC1ib3gtZmxleDogMDtcbiAgICAgICAgLW1zLWZsZXgtcG9zaXRpdmU6IDA7XG4gICAgICAgICAgICBmbGV4LWdyb3c6IDA7XG4gIH1cbiAgLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi1pbm5lciAubmF2aWdhdGlvbi1zaWRlYmFyIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxuICAudXNlci1uYXZpZ2F0aW9uX19zdWItbmF2LWlubmVyIC5uYXZpZ2F0aW9uLXNpZGViYXItaXRlbSB7XG4gICAgYm9yZGVyOiAwO1xuICB9XG4gIC51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtaW5uZXIgLm5hdmlnYXRpb24tc2lkZWJhci1pdGVtOmZpcnN0LWNoaWxkIC5uYXZpZ2F0aW9uLXNpZGViYXItaXRlbV9fbGluayB7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gIH1cbn1cbi51c2VyLW5hdmlnYXRpb25fX2Nsb3NlLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDNyZW07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY5cHgpIGFuZCAobWluLWhlaWdodDogNTAxcHgpIHtcbiAgLnVzZXItbmF2aWdhdGlvbl9fY2xvc2UtY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4udXNlci1uYXZpZ2F0aW9uX19jbG9zZS1jb250YWluZXIgLmljb24tYnV0dG9uIHtcbiAgd2lkdGg6IGF1dG87XG4gIGhlaWdodDogYXV0bztcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbn1cbi51c2VyLW5hdmlnYXRpb25fX2Nsb3NlLWNvbnRhaW5lci1jYXJ0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbi51c2VyLW5hdmlnYXRpb25fX2Nsb3NlLWNvbnRhaW5lci1saXN0IHtcbiAgYmFja2dyb3VuZDogbm9uZTtcbn1cbi51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtY2xvc2Uge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMXJlbTtcbiAgcmlnaHQ6IDFyZW07XG4gIG1hcmdpbi1yaWdodDogMDtcbn1cbi51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtY2xvc2Ugc3ZnIHtcbiAgd2lkdGg6IDJyZW07XG4gIGhlaWdodDogMnJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSBhbmQgKG1pbi1oZWlnaHQ6IDUwMXB4KSB7XG4gIC51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtY2xvc2Uge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtdGl0bGUge1xuICBwYWRkaW5nOiAwLjhyZW0gNHJlbSAwLjkzMzMzMzMzMzNyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjY3O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtdGl0bGUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi51c2VyLW5hdmlnYXRpb25fX3N1Yi1uYXYtYWN0aW9ucyB7XG4gIHBhZGRpbmc6IDEuNHJlbSAxLjA2NjY2NjY2NjdyZW0gMnJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi1hY3Rpb25zIHtcbiAgICBwYWRkaW5nOiAxLjA2NjY2NjY2NjdyZW0gMS42cmVtIDAuMDY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi1saW5rIHtcbiAgY29sb3I6ICNiMmIyYjI7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogY29sb3IgMjUwbXMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGNvbG9yIDI1MG1zIGVhc2UtaW4tb3V0O1xufVxuLnVzZXItbmF2aWdhdGlvbl9fc3ViLW5hdi1saW5rOmhvdmVyIHtcbiAgY29sb3I6ICM5MjkyOTI7XG59XG4udXNlci1uYXZpZ2F0aW9uX19iZW5lZml0LWl0ZW0ge1xuICBsaXN0LXN0eWxlLXR5cGU6IGluaXRpYWw7XG4gIGxpc3Qtc3R5bGUtcG9zaXRpb246IGluc2lkZTtcbn1cbi51c2VyLW5hdmlnYXRpb24gLmJ1dHRvbiB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5hY2NvcmRpb24tZWxlbWVudC1yb3cuY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiB1bnNldDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwIDEuMzMzMzMzMzMzM3JlbTtcbn1cbi5hY2NvcmRpb24tZWxlbWVudC1yb3dfX2hlYWRsaW5lLXdyYXBwZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgcGFkZGluZzogMS42NjY2NjY2NjY3cmVtIDA7XG59XG4uYWNjb3JkaW9uLWVsZW1lbnQtcm93X19oZWFkbGluZS13cmFwcGVyOmhvdmVyIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmFjY29yZGlvbi1lbGVtZW50LXJvd19faGVhZGxpbmUtd3JhcHBlciAuYWNjb3JkaW9uLWVsZW1lbnQtcm93X19oZWFkbGluZSB7XG4gIG1hcmdpbjogMDtcbn1cbi5hY2NvcmRpb24tZWxlbWVudC1yb3dfX2hlYWRsaW5lLXdyYXBwZXIgLmFjY29yZGlvbi1lbGVtZW50LXJvd19faGVhZGxpbmUtaWNvbiB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgaGVpZ2h0OiAycmVtO1xuICBmb250LXNpemU6IDNyZW07XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC41cyBlYXNlO1xuICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjVzIGVhc2U7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzIGVhc2U7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzIGVhc2UsIC13ZWJraXQtdHJhbnNmb3JtIDAuNXMgZWFzZTtcbn1cbi5hY2NvcmRpb24tZWxlbWVudC1yb3dfX2hlYWRsaW5lLXdyYXBwZXIuYWN0aXZlIC5hY2NvcmRpb24tZWxlbWVudC1yb3dfX2hlYWRsaW5lIHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4uYWNjb3JkaW9uLWVsZW1lbnQtcm93X19oZWFkbGluZS13cmFwcGVyLmFjdGl2ZSAuYWNjb3JkaW9uLWVsZW1lbnQtcm93X19oZWFkbGluZS1pY29uIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMTgwZGVnKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTgwZGVnKTtcbn1cbi5hY2NvcmRpb24tZWxlbWVudC1yb3dfX2NvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuLmFjY29yZGlvbi1lbGVtZW50LXJvd19fY29udGVudCAuY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiB1bnNldDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuLmFjY29yZGlvbi1lbGVtZW50LXJvd19fY29udGVudC5hY3RpdmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZy1ib3R0b206IDEuMzMzMzMzMzMzM3JlbTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmJpdGUta2FycmllcmUge1xuICBtYXJnaW46IDJyZW0gYXV0bztcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNhdGFsb2ctYm94IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLXRvcDogMnJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5jYXRhbG9nLWJveCB7XG4gICAgd2lkdGg6IDI1JTtcbiAgICBwYWRkaW5nOiAwIDAuNXJlbTtcbiAgfVxufVxuLmNhdGFsb2ctYm94X19hY3Rpb25zIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nLXRvcDogMXJlbTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBXZSBuZWVkIHRoZSAhaW1wb3J0YW50IGluIHRoaXMgc3R5bGVzIGJlY2F1c2UgdGhlIGtlZW4gc2xpZGVyIGFkZHMgaW5saW5lIHN0eWxlcyB0byB0aGUgc2xpZGVzIGZvciBtaW4td2lkdGgsXG4gKiBtYXgtd2lkdGggYW5kIHRyYW5zZm9ybVxuICovIiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogV2UgbmVlZCB0aGUgIWltcG9ydGFudCBpbiB0aGlzIHN0eWxlcyBiZWNhdXNlIHRoZSBrZWVuIHNsaWRlciBhZGRzIGlubGluZSBzdHlsZXMgdG8gdGhlIHNsaWRlcyBmb3IgbWluLXdpZHRoLFxuICogbWF4LXdpZHRoIGFuZCB0cmFuc2Zvcm1cbiAqL1xuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmNvbnRlbnQtc2xpZGVyLXNsaWRlLWltYWdlLS1pcy1oZXJvIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiA4LjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb250ZW50LXNsaWRlci1zbGlkZS1pbWFnZS0taXMtaGVyby5jb250ZW50LXNsaWRlci1zbGlkZS1pbWFnZS0tbm8taW1hZ2Uge1xuICAgIG1hcmdpbjogYXV0byAwO1xuICB9XG4gIC5jb250ZW50LXNsaWRlci1zbGlkZS1pbWFnZS0taXMtaGVyby5rZWVuLXNsaWRlcl9fc2xpZGUge1xuICAgIC8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuICAgIG1pbi13aWR0aDogY2FsYyg1MCUgLSAyMXB4KSAhaW1wb3J0YW50O1xuICAgIG1heC13aWR0aDogY2FsYyg1MCUgLSAyMXB4KSAhaW1wb3J0YW50O1xuICAgIC8qIHN0eWxlbGludC1lbmFibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4gICAgLXdlYmtpdC1ib3gtZmxleDogMjtcbiAgICAgICAgLW1zLWZsZXgtcG9zaXRpdmU6IDI7XG4gICAgICAgICAgICBmbGV4LWdyb3c6IDI7XG4gIH1cbn1cbi5jb250ZW50LXNsaWRlci1zbGlkZS1pbWFnZS0tcGxhY2Vob2xkZXIua2Vlbi1zbGlkZXJfX3NsaWRlIHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4gIG1pbi13aWR0aDogMCAhaW1wb3J0YW50O1xuICBtYXgtd2lkdGg6IDAgIWltcG9ydGFudDtcbiAgd2lkdGg6IDAgIWltcG9ydGFudDtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcbiAgZGlzcGxheTogbm9uZTtcbiAgLyogc3R5bGVsaW50LWVuYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbn1cbi5jb250ZW50LXNsaWRlci1zbGlkZS1pbWFnZV9fdGV4dCB7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICBsaW5lLWhlaWdodDogMS42cmVtO1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLmNvbnRlbnQtc2xpZGVyLXNsaWRlLWltYWdlX19idXR0b24ge1xuICBmb250LXNpemU6IDEuMDY2NjY2NjY2N3JlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDY2NjY2NjY2N3JlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBXZSBuZWVkIHRoZSAhaW1wb3J0YW50IGluIHRoaXMgc3R5bGVzIGJlY2F1c2UgdGhlIGtlZW4gc2xpZGVyIGFkZHMgaW5saW5lIHN0eWxlcyB0byB0aGUgc2xpZGVzIGZvciBtaW4td2lkdGgsXG4gKiBtYXgtd2lkdGggYW5kIHRyYW5zZm9ybVxuICovXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuY29udGVudC1zbGlkZXItc2xpZGUtaW1hZ2UtdGV4dC0taXMtaGVybyB7XG4gICAgcGFkZGluZy1yaWdodDogOC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29udGVudC1zbGlkZXItc2xpZGUtaW1hZ2UtdGV4dC0taXMtaGVyby5jb250ZW50LXNsaWRlci1zbGlkZS1pbWFnZS10ZXh0LS1uby1pbWFnZSB7XG4gICAgbWFyZ2luOiBhdXRvIDA7XG4gIH1cbiAgLmNvbnRlbnQtc2xpZGVyLXNsaWRlLWltYWdlLXRleHQtLWlzLWhlcm8ua2Vlbi1zbGlkZXJfX3NsaWRlIHtcbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbiAgICBtaW4td2lkdGg6IGNhbGMoNTAlIC0gMjFweCkgIWltcG9ydGFudDtcbiAgICBtYXgtd2lkdGg6IGNhbGMoNTAlIC0gMjFweCkgIWltcG9ydGFudDtcbiAgICAvKiBzdHlsZWxpbnQtZW5hYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuICAgIC13ZWJraXQtYm94LWZsZXg6IDI7XG4gICAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAyO1xuICAgICAgICAgICAgZmxleC1ncm93OiAyO1xuICB9XG59XG4uY29udGVudC1zbGlkZXItc2xpZGUtaW1hZ2UtdGV4dC0tcGxhY2Vob2xkZXIua2Vlbi1zbGlkZXJfX3NsaWRlIHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4gIG1pbi13aWR0aDogMCAhaW1wb3J0YW50O1xuICBtYXgtd2lkdGg6IDAgIWltcG9ydGFudDtcbiAgd2lkdGg6IDAgIWltcG9ydGFudDtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcbiAgZGlzcGxheTogbm9uZTtcbiAgLyogc3R5bGVsaW50LWVuYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbn1cbi5jb250ZW50LXNsaWRlci1zbGlkZS1pbWFnZS10ZXh0X190ZXh0IHtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjZyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG4uY29udGVudC1zbGlkZXItc2xpZGUtaW1hZ2UtdGV4dF9fYnV0dG9uIHtcbiAgZm9udC1zaXplOiAxLjA2NjY2NjY2NjdyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ2NjY2NjY2NjdyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogV2UgbmVlZCB0aGUgIWltcG9ydGFudCBpbiB0aGlzIHN0eWxlcyBiZWNhdXNlIHRoZSBrZWVuIHNsaWRlciBhZGRzIGlubGluZSBzdHlsZXMgdG8gdGhlIHNsaWRlcyBmb3IgbWluLXdpZHRoLFxuICogbWF4LXdpZHRoIGFuZCB0cmFuc2Zvcm1cbiAqL1xuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmNvbnRlbnQtc2xpZGVyLXNsaWRlLWltYWdlLXRleHQtZnVsbC0taXMtaGVybyB7XG4gICAgcGFkZGluZy1yaWdodDogOC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29udGVudC1zbGlkZXItc2xpZGUtaW1hZ2UtdGV4dC1mdWxsLS1pcy1oZXJvLmNvbnRlbnQtc2xpZGVyLXNsaWRlLWltYWdlLXRleHQtZnVsbC0tbm8taW1hZ2Uge1xuICAgIG1hcmdpbjogYXV0byAwO1xuICB9XG4gIC5jb250ZW50LXNsaWRlci1zbGlkZS1pbWFnZS10ZXh0LWZ1bGwtLWlzLWhlcm8ua2Vlbi1zbGlkZXJfX3NsaWRlIHtcbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbiAgICBtaW4td2lkdGg6IGNhbGMoNTAlIC0gMjFweCkgIWltcG9ydGFudDtcbiAgICBtYXgtd2lkdGg6IGNhbGMoNTAlIC0gMjFweCkgIWltcG9ydGFudDtcbiAgICAvKiBzdHlsZWxpbnQtZW5hYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuICAgIC13ZWJraXQtYm94LWZsZXg6IDI7XG4gICAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAyO1xuICAgICAgICAgICAgZmxleC1ncm93OiAyO1xuICB9XG59XG4uY29udGVudC1zbGlkZXItc2xpZGUtaW1hZ2UtdGV4dC1mdWxsLS1wbGFjZWhvbGRlci5rZWVuLXNsaWRlcl9fc2xpZGUge1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbiAgbWluLXdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gIG1heC13aWR0aDogMCAhaW1wb3J0YW50O1xuICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xuICBkaXNwbGF5OiBub25lO1xuICAvKiBzdHlsZWxpbnQtZW5hYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xufVxuLmNvbnRlbnQtc2xpZGVyLXNsaWRlLWltYWdlLXRleHQtZnVsbF9fdGV4dCB7XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xuICBsaW5lLWhlaWdodDogMS42cmVtO1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLmNvbnRlbnQtc2xpZGVyLXNsaWRlLWltYWdlLXRleHQtZnVsbF9fYnV0dG9uIHtcbiAgZm9udC1zaXplOiAxLjA2NjY2NjY2NjdyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ2NjY2NjY2NjdyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5jdGEtYnV0dG9uIHtcbiAgZm9udC1zaXplOiAxLjA2NjY2NjY2NjdyZW07XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4uY3RhLWJ1dHRvbiAuYnV0dG9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLmN0YS1idXR0b24gLmJ1dHRvbi0tc2x2dGVjIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAxYTNlYztcbiAgY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogIzAxYTNlYztcbn1cbi5jdGEtYnV0dG9uIC5idXR0b24tLXNsdnRlYyAuYnV0dG9uX19pY29uLXJpZ2h0LS1zbHZ0ZWMgPiBzdmcge1xuICBmaWxsOiAjZmZmO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY3RhLWJ1dHRvbi1udW1pbm9zX19saW5rIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uaGVhZGxpbmUtZ3JvdXAge1xuICBtYXJnaW4tdG9wOiAwLjVyZW07XG59XG4uaGVhZGxpbmUtZ3JvdXAgLmhlYWRsaW5lIHtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5oZWFkbGluZS1ncm91cCAuaGVhZGxpbmUtLXByZWxpbmUge1xuICBmb250LXNpemU6IDEuMnJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDY2NjY2NjY2N3JlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5oZWFkbGluZS1ncm91cCAuaGVhZGxpbmUtLWhlYWRsaW5lIHtcbiAgZm9udC1zaXplOiAxLjZyZW07XG4gIGxpbmUtaGVpZ2h0OiAycmVtO1xuICBmb250LXdlaWdodDogNzAwO1xufVxuLmhlYWRsaW5lLWdyb3VwIC5oZWFkbGluZS0tc3VibGluZSB7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xuICBsaW5lLWhlaWdodDogMS43MzMzMzMzMzMzcmVtO1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLmhlYWRsaW5lLWdyb3VwLS1pY29uLWJveCAuaGVhZGxpbmUtLXByZWxpbmUsIC5oZWFkbGluZS1ncm91cC0tc2lkZWJhciAuaGVhZGxpbmUtLXByZWxpbmUge1xuICBmb250LXNpemU6IDEuMDY2NjY2NjY2N3JlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMzMzMzMzMzMzM3JlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5oZWFkbGluZS1ncm91cC0taWNvbi1ib3ggLmhlYWRsaW5lLS1oZWFkbGluZSwgLmhlYWRsaW5lLWdyb3VwLS1zaWRlYmFyIC5oZWFkbGluZS0taGVhZGxpbmUge1xuICBmb250LXNpemU6IDEuMnJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNzMzMzMzMzMzM3JlbTtcbiAgdGV4dC10cmFuc2Zvcm06IGluaGVyaXQ7XG59XG4uaGVhZGxpbmUtZ3JvdXAtLWljb24tYm94IC5oZWFkbGluZS0tc3VibGluZSwgLmhlYWRsaW5lLWdyb3VwLS1zaWRlYmFyIC5oZWFkbGluZS0tc3VibGluZSB7XG4gIGZvbnQtc2l6ZTogMS4wNjY2NjY2NjY3cmVtO1xuICBsaW5lLWhlaWdodDogMS42cmVtO1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLmhlYWRsaW5lLWdyb3VwLS1zaWRlYmFyIC5oZWFkbGluZS0taGVhZGxpbmUsIC5oZWFkbGluZS1ncm91cC0tc2lkZWJhciAuaGVhZGxpbmUtLXN1YmxpbmUge1xuICBtYXJnaW46IDA7XG59XG4uaGVhZGxpbmUtZ3JvdXAtLXNpZGViYXIgLmhlYWRsaW5lLS1zdWJsaW5lIHtcbiAgZm9udC1zaXplOiAwLjhyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjMzMzMzMzMzMzNyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG4uaGVhZGxpbmUtZ3JvdXAtLWJveC1oZWFkbGluZSAuaGVhZGxpbmUge1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xufVxuLmhlYWRsaW5lLWdyb3VwLS1ib3gtaGVhZGxpbmUgLmhlYWRsaW5lLS1oZWFkbGluZSB7XG4gIGZvbnQtc2l6ZTogMi41MzMzMzMzMzMzcmVtO1xuICBsaW5lLWhlaWdodDogMi45MzMzMzMzMzMzcmVtO1xuICBmb250LXdlaWdodDogMzAwO1xufVxuLmhlYWRsaW5lLWdyb3VwLS1icmVhay13b3JkIHtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmljb24tYm94IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogMCAwLjVyZW07XG59XG4uaWNvbi1ib3hfX2ljb24ge1xuICAtbXMtZmxleC1pdGVtLWFsaWduOiBjZW50ZXI7XG4gICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG59XG4uaWNvbi1ib3hfX2ljb24gc3ZnIHtcbiAgd2lkdGg6IDYuMjg1NzE0Mjg1N3JlbTtcbiAgaGVpZ2h0OiA2LjI4NTcxNDI4NTdyZW07XG59XG4uaWNvbi1ib3hfX3RleHQtY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG4uaWNvbi1ib3hfX3RleHQge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgbWFyZ2luOiAwIDAgMXJlbSAwO1xufVxuLmljb24tYm94X190ZXh0IHAge1xuICBtYXJnaW46IDA7XG59XG4uaWNvbi1ib3ggLmN0YS1idXR0b24gLmJ1dHRvbjo6YmVmb3JlIHtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5pZnJhbWUtZWxlbWVudCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5pZnJhbWUtZWxlbWVudF9faWZyYW1lIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMDtcbn1cbi5pZnJhbWUtZWxlbWVudF9faWZyYW1lLS1mdWxsIHtcbiAgaGVpZ2h0OiAxMDB2aDtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmltYWdlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmltYWdlX19pbWFnZSB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmltYWdlLS16b29tIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uaW1hZ2UtZWxlbWVudCB7XG4gIGxpbmUtaGVpZ2h0OiAwO1xufVxuLmltYWdlLWVsZW1lbnRfX2xpbmsge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5pbWFnZS1tYXAtYXJlYSB7XG4gIHotaW5kZXg6IDcwMDtcbn1cbi5pbWFnZS1tYXAtYXJlYS0tY2lyY2xlLWZpbGwge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmltYWdlLW1hcC1hcmVhLXRvb2x0aXAge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjZWNlY2VjO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIG1heC13aWR0aDogMTMuMzMzMzMzMzMzM3JlbTtcbiAgbWluLWhlaWdodDogMTByZW07XG4gIG1hcmdpbi10b3A6IDFyZW07XG4gIHBhZGRpbmc6IDAuNXJlbTtcbiAgei1pbmRleDogMTA7XG59XG4uaW1hZ2UtbWFwLWFyZWEtdG9vbHRpcCBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmltYWdlLW1hcC1hcmVhLXRvb2x0aXBfX2Nsb3NlLWJ1dHRvbiAuaWNvbi1idXR0b25fX2ljb24gc3ZnIHtcbiAgd2lkdGg6IDEuNDY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAxLjQ2NjY2NjY2NjdyZW07XG59XG4uaW1hZ2UtbWFwLWFyZWEtdG9vbHRpcC5oYXMtcmlnaHQtcG9pbnRlciB7XG4gIGJvcmRlci1yaWdodC1jb2xvcjogI2ZlY2MwMDtcbiAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAycHg7XG59XG4uaW1hZ2UtbWFwLWFyZWEtdG9vbHRpcC5oYXMtcmlnaHQtcG9pbnRlcjo6YmVmb3JlIHtcbiAgcmlnaHQ6IC0wLjEzMzMzMzMzMzNyZW07XG59XG4uaW1hZ2UtbWFwLWFyZWEtdG9vbHRpcC5oYXMtcmlnaHQtcG9pbnRlcjo6YWZ0ZXIge1xuICByaWdodDogLTAuNTMzMzMzMzMzM3JlbTtcbn1cbi5pbWFnZS1tYXAtYXJlYS10b29sdGlwLmhhcy1sZWZ0LXBvaW50ZXIge1xuICBib3JkZXItbGVmdC1jb2xvcjogI2ZlY2MwMDtcbiAgYm9yZGVyLWxlZnQtd2lkdGg6IDJweDtcbn1cbi5pbWFnZS1tYXAtYXJlYS10b29sdGlwLmhhcy1sZWZ0LXBvaW50ZXI6OmJlZm9yZSB7XG4gIGxlZnQ6IC0wLjEzMzMzMzMzMzNyZW07XG59XG4uaW1hZ2UtbWFwLWFyZWEtdG9vbHRpcC5oYXMtbGVmdC1wb2ludGVyOjphZnRlciB7XG4gIGxlZnQ6IC0wLjQ2NjY2NjY2NjdyZW07XG59XG4uaW1hZ2UtbWFwLWFyZWEtdG9vbHRpcDo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZlY2MwMDtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgaGVpZ2h0OiAxMjAlO1xuICB3aWR0aDogMC4xMzMzMzMzMzMzcmVtO1xuICB0b3A6IDA7XG59XG4uaW1hZ2UtbWFwLWFyZWEtdG9vbHRpcDo6YmVmb3JlIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4uaW1hZ2UtbWFwLWFyZWEtdG9vbHRpcDo6YWZ0ZXIge1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVjYzAwO1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBoZWlnaHQ6IDAuOHJlbTtcbiAgd2lkdGg6IDAuOHJlbTtcbn1cbi5pbWFnZS1tYXAtYXJlYS10b29sdGlwOjphZnRlciBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmltYWdlLW1hcC1hcmVhLXRvb2x0aXAtLXNsdnRlYzo6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAxYTNlYztcbn1cbi5pbWFnZS1tYXAtYXJlYS10b29sdGlwLS1zbHZ0ZWM6OmFmdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAxYTNlYztcbn1cbi5pbWFnZS1tYXAtYXJlYS10b29sdGlwIC5oZWFkbGluZSB7XG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjZDBkMGQwO1xuICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG4gIGZvbnQtc2l6ZTogMC45MzMzMzMzMzMzcmVtO1xufVxuLmltYWdlLW1hcC1hcmVhLXRvb2x0aXAgLm1hcmtkb3duIHtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG59XG4uaW1hZ2UtbWFwLWFyZWEtdG9vbHRpcCAubWFya2Rvd24gcCB7XG4gIG1hcmdpbjogMC4yNXJlbSAwIDA7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5pbWFnZS1tYXAtYXJlYS10b29sdGlwLWNvbnRlbnQge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBtYXgtd2lkdGg6IDIycmVtO1xuICBwYWRkaW5nOiAwLjVyZW0gMCAycmVtO1xufVxuLmltYWdlLW1hcC1hcmVhLXRvb2x0aXAtY29udGVudC5oYXMtcmlnaHQtcG9pbnRlciB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDM1cHg7XG59XG4uaW1hZ2UtbWFwLWFyZWEtdG9vbHRpcC1jb250ZW50Lmhhcy1yaWdodC1wb2ludGVyOjpiZWZvcmUge1xuICByaWdodDogLTAuMTY2NjY2NjY2N3JlbTtcbn1cbi5pbWFnZS1tYXAtYXJlYS10b29sdGlwLWNvbnRlbnQuaGFzLWxlZnQtcG9pbnRlciB7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzNXB4O1xufVxuLmltYWdlLW1hcC1hcmVhLXRvb2x0aXAtY29udGVudC5oYXMtZG93bi1wb2ludGVyOjphZnRlciB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKHZhcigtLWRvd24tcG9pbnRlci10cmFuc2xhdGUteSkpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSh2YXIoLS1kb3duLXBvaW50ZXItdHJhbnNsYXRlLXkpKTtcbiAgdG9wOiAwO1xufVxuLmltYWdlLW1hcC1hcmVhLXRvb2x0aXAtY29udGVudC5oYXMtZG93bi1wb2ludGVyOjpiZWZvcmUge1xuICBoZWlnaHQ6IDEwMCU7XG4gIG1hcmdpbi10b3A6IHZhcigtLWRvd24tcG9pbnRlci1tYXJnaW4pO1xufVxuLmltYWdlLW1hcC1hcmVhLXRvb2x0aXAtY29udGVudC5oYXMtdXAtcG9pbnRlcjo6YWZ0ZXIge1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSh2YXIoLS11cC1wb2ludGVyLXRyYW5zbGF0ZS15KSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKHZhcigtLXVwLXBvaW50ZXItdHJhbnNsYXRlLXkpKTtcbiAgYm90dG9tOiAwO1xufVxuLmltYWdlLW1hcC1hcmVhLXRvb2x0aXAtY29udGVudC5oYXMtdXAtcG9pbnRlcjo6YmVmb3JlIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW4tdG9wOiB2YXIoLS11cC1wb2ludGVyLW1hcmdpbik7XG59XG4uaW1hZ2UtbWFwLWFyZWEtdG9vbHRpcC1jb250ZW50IC50ZWFzZXItYm94IHtcbiAgcGFkZGluZzogMC41cmVtO1xufVxuLmltYWdlLW1hcC1hcmVhLXRvb2x0aXAtY29udGVudCAudGVhc2VyLWJveF9fYnV0dG9uIHtcbiAgbWFyZ2luLXRvcDogMC41cmVtO1xufVxuLmltYWdlLW1hcC1hcmVhLXRvb2x0aXAtY29udGVudCAuaGVhZGxpbmUge1xuICBib3JkZXI6IG5vbmU7XG4gIHBhZGRpbmctYm90dG9tOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuLmltYWdlLW1hcC1hcmVhLXRvb2x0aXAtY29udGVudCAuaWNvbi1idXR0b24ge1xuICB3aWR0aDogMnJlbTtcbiAgaGVpZ2h0OiAycmVtO1xufVxuLmltYWdlLW1hcC1hcmVhLXRvb2x0aXAtY29udGVudCAuaWNvbi1idXR0b25fX2ljb24sIC5pbWFnZS1tYXAtYXJlYS10b29sdGlwLWNvbnRlbnQgLmljb24tYnV0dG9uX19pY29uLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAycmVtO1xuICBoZWlnaHQ6IDJyZW07XG59XG4uaW1hZ2UtbWFwLWFyZWEtdG9vbHRpcC1jb250ZW50IC5pY29uLWJ1dHRvbl9faWNvbiBzdmcge1xuICB3aWR0aDogMS40NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDEuNDY2NjY2NjY2N3JlbTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmltYWdlLW1hcC1hcmVhLXRvb2x0aXAtbnVtaW5vcyAuaGVhZGxpbmUge1xuICBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2QwZDBkMDtcbiAgcGFkZGluZy1ib3R0b206IDAuNXJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbn1cbi5pbWFnZS1tYXAtYXJlYS10b29sdGlwLW51bWlub3MgLm1hcmtkb3duIHtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG59XG4uaW1hZ2UtbWFwLWFyZWEtdG9vbHRpcC1udW1pbm9zIC5tYXJrZG93biBwIHtcbiAgbWFyZ2luOiAwLjI1cmVtIDAgMDtcbn1cbi5pbWFnZS1tYXAtYXJlYS10b29sdGlwLW51bWlub3M6OmJlZm9yZSB7XG4gIHRvcDogLTMuMDY2NjY2NjY2N3JlbTtcbn1cbi5pbWFnZS1tYXAtYXJlYS10b29sdGlwLW51bWlub3M6OmFmdGVyIHtcbiAgdG9wOiAtMy4wNjY2NjY2NjY3cmVtO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uaW1hZ2UtbWFwLWFyZWEtdG9vbHRpcC1wcm9kdWN0IHtcbiAgbWF4LXdpZHRoOiAyMnJlbTtcbiAgcGFkZGluZzogMC41cmVtIDEuNXJlbSAycmVtO1xufVxuLmltYWdlLW1hcC1hcmVhLXRvb2x0aXAtcHJvZHVjdC5oYXMtcmlnaHQtcG9pbnRlciB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDM1cHg7XG59XG4uaW1hZ2UtbWFwLWFyZWEtdG9vbHRpcC1wcm9kdWN0Lmhhcy1yaWdodC1wb2ludGVyOjpiZWZvcmUge1xuICByaWdodDogLTAuMTY2NjY2NjY2N3JlbTtcbn1cbi5pbWFnZS1tYXAtYXJlYS10b29sdGlwLXByb2R1Y3QuaGFzLXJpZ2h0LXBvaW50ZXI6OmFmdGVyIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMC4zMzMzMzMzMzMzcmVtLCAtNHJlbSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTAuMzMzMzMzMzMzM3JlbSwgLTRyZW0pO1xufVxuLmltYWdlLW1hcC1hcmVhLXRvb2x0aXAtcHJvZHVjdC5oYXMtbGVmdC1wb2ludGVyIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDM1cHg7XG59XG4uaW1hZ2UtbWFwLWFyZWEtdG9vbHRpcC1wcm9kdWN0Lmhhcy1sZWZ0LXBvaW50ZXI6OmFmdGVyIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLjMzMzMzMzMzMzNyZW0sIC00cmVtKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLjMzMzMzMzMzMzNyZW0sIC00cmVtKTtcbn1cbi5pbWFnZS1tYXAtYXJlYS10b29sdGlwLXByb2R1Y3Q6OmJlZm9yZSB7XG4gIGhlaWdodDogMTAwJTtcbiAgbWFyZ2luLXRvcDogY2FsYygoNTAlIC0gNy41cmVtKSAqIC0xKTtcbn1cbi5pbWFnZS1tYXAtYXJlYS10b29sdGlwLXByb2R1Y3RfX2Nsb3NlLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDA7XG4gIHRvcDogMDtcbiAgei1pbmRleDogNzAwO1xufVxuLmltYWdlLW1hcC1hcmVhLXRvb2x0aXAtcHJvZHVjdCAuaWNvbi1idXR0b24ge1xuICB3aWR0aDogMnJlbTtcbiAgaGVpZ2h0OiAycmVtO1xufVxuLmltYWdlLW1hcC1hcmVhLXRvb2x0aXAtcHJvZHVjdCAuaWNvbi1idXR0b25fX2ljb24sIC5pbWFnZS1tYXAtYXJlYS10b29sdGlwLXByb2R1Y3QgLmljb24tYnV0dG9uX19pY29uLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAycmVtO1xuICBoZWlnaHQ6IDJyZW07XG59XG4uaW1hZ2UtbWFwLWFyZWEtdG9vbHRpcC1wcm9kdWN0IC5pY29uLWJ1dHRvbl9faWNvbiBzdmcge1xuICB3aWR0aDogMS40NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDEuNDY2NjY2NjY2N3JlbTtcbn1cbi5pbWFnZS1tYXAtYXJlYS10b29sdGlwLXByb2R1Y3QgLnRodW1ibmFpbCB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5pbWFnZS1tYXAtYXJlYS10b29sdGlwLXByb2R1Y3QgLmF2YWlsYWJpbGl0eSB7XG4gIGZvbnQtc2l6ZTogMC44cmVtO1xufVxuLmltYWdlLW1hcC1hcmVhLXRvb2x0aXAtcHJvZHVjdCAuYXZhaWxhYmlsaXR5X19sYWJlbCB7XG4gIG1hcmdpbi1sZWZ0OiAwLjVyZW07XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5pbWFnZS1tYXAtcHJvZHVjdC1ib3gge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbn1cbi5pbWFnZS1tYXAtcHJvZHVjdC1ib3ggLmhlYWRsaW5lIHtcbiAgYm9yZGVyOiBub25lO1xufVxuLmltYWdlLW1hcC1wcm9kdWN0LWJveF9fYWN0aW9ucyB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgZmxleC13cmFwOiBub3dyYXA7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5pbWFnZS1tYXAtc2xpZGVyX190YXJnZXQtaW1hZ2Uge1xuICB3aWR0aDogY2FsYygxMDAlICsgMnJlbSk7XG4gIGhlaWdodDogNzB2aDtcbiAgbWFyZ2luLWxlZnQ6IC0xcmVtO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IC0xO1xufVxuLmltYWdlLW1hcC1zbGlkZXJfX3RhcmdldC1pbWFnZS1jb250YWluZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgd2lkdGg6IDgwcmVtO1xuICBoZWlnaHQ6IDQwLjUzMzMzMzMzMzNyZW07XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDFzIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBhbGwgMXMgZWFzZS1pbi1vdXQ7XG59XG4uaW1hZ2UtbWFwLXNsaWRlcl9fdGFyZ2V0LWltYWdlLWNvbnRhaW5lciAucG9pbnRlciB7XG4gIHdpZHRoOiAwLjhyZW07XG4gIGhlaWdodDogMC44cmVtO1xuICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZlY2MwMDtcbn1cbi5pbWFnZS1tYXAtc2xpZGVyX190YXJnZXQtaW1hZ2UtY29udGFpbmVyIC5wb2ludGVyOjpiZWZvcmUge1xuICBjb250ZW50OiBcIlwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAwLjEzMzMzMzMzMzNyZW07XG4gIGhlaWdodDogNDByZW07XG4gIHRvcDogMDtcbiAgbGVmdDogMC4zMzMzMzMzMzMzcmVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVjYzAwO1xufVxuLmltYWdlLW1hcC1zbGlkZXJfX2NvbnRhaW5lciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBib3JkZXItdG9wOiAwLjJyZW0gc29saWQgI2ZlY2MwMDtcbiAgbWF4LXdpZHRoOiAyNi42NjY2NjY2NjY3cmVtO1xuICBtYXJnaW46IC0xMnJlbSBhdXRvIDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5pbWFnZS1tYXAtc2xpZGVyX19jb250YWluZXIgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi5pbWFnZS1tYXAtc2xpZGVyX19zbGlkZXMgLnNsaWNrLWRvdHMge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1hcmdpbjogMXJlbSBhdXRvIDA7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbi5pbWFnZS1tYXAtc2xpZGVyX19zbGlkZXMgLnNsaWNrLWRvdHMgbGkge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDAuNjY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAwLjY2NjY2NjY2NjdyZW07XG4gIG1hcmdpbjogMC40cmVtO1xuICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICBiYWNrZ3JvdW5kOiAjOTI5MjkyO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbi5pbWFnZS1tYXAtc2xpZGVyX19zbGlkZXMgLnNsaWNrLWRvdHMgbGkuc2xpY2stYWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZlY2MwMDtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIHdpZHRoOiAxLjMzMzMzMzMzMzNyZW07XG4gIGhlaWdodDogMS4zMzMzMzMzMzMzcmVtO1xuICBtYXJnaW46IDAuMDY2NjY2NjY2N3JlbTtcbn1cbi5pbWFnZS1tYXAtc2xpZGVyX19zbGlkZXMgLnNsaWNrLWRvdHMgbGkuc2xpY2stYWN0aXZlIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG4uaW1hZ2UtbWFwLXNsaWRlcl9fc2xpZGVzIC5zbGljay1kb3RzIGJ1dHRvbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uaW1hZ2UtbWFwLXNsaWRlcl9fc2xpZGVzIC5zbGljay1zbGlkZSBpbWcge1xuICBtYXJnaW46IDAgYXV0bztcbn1cbi5pbWFnZS1tYXAtc2xpZGVyX19zbGlkZSB7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzNXB4O1xuICBwYWRkaW5nOiAycmVtO1xuICBib3JkZXI6IDAuMDY2NjY2NjY2N3JlbSBzb2xpZCAjZWNlY2VjO1xufVxuLmltYWdlLW1hcC1zbGlkZXJfX3NsaWRlIC5oZWFkbGluZSB7XG4gIGJvcmRlci1ib3R0b206IDAuMDY2NjY2NjY2N3JlbSBzb2xpZCAjMWExNzFiO1xuICBoZWlnaHQ6IDIuNXJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbn1cbi5pbWFnZS1tYXAtc2xpZGVyIC50ZWFzZXItYm94LFxuLmltYWdlLW1hcC1zbGlkZXIgLmltYWdlLW1hcC1wcm9kdWN0LWJveCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5pbWFnZS1tYXAtc2xpZGVyIC50ZWFzZXItYm94IC5oZWFkbGluZSxcbi5pbWFnZS1tYXAtc2xpZGVyIC5pbWFnZS1tYXAtcHJvZHVjdC1ib3ggLmhlYWRsaW5lIHtcbiAgYm9yZGVyOiBub25lO1xuICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgaGVpZ2h0OiBhdXRvO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uaW1hZ2UtdGVhc2VyLWZ1bGwtc2l6ZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5pbWFnZS10ZWFzZXItZnVsbC1zaXplIHtcbiAgICBtYXgtaGVpZ2h0OiA1M3ZoO1xuICB9XG59XG4uaW1hZ2UtdGVhc2VyLWZ1bGwtc2l6ZSAuaW1hZ2Uge1xuICB3aWR0aDogMTAwJTtcbn1cbi5pbWFnZS10ZWFzZXItZnVsbC1zaXplIC5pbWFnZV9faW1hZ2Uge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IGF1dG87XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5pbWFnZS10ZWFzZXItZnVsbC1zaXplIC5pbWFnZV9faW1hZ2Uge1xuICAgIG1heC1oZWlnaHQ6IDUzdmg7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgLW8tb2JqZWN0LWZpdDogY292ZXI7XG4gICAgICAgb2JqZWN0LWZpdDogY292ZXI7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cbi5pbWFnZS10ZWFzZXItZnVsbC1zaXplX19jb250ZW50LWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLmltYWdlLXRlYXNlci1mdWxsLXNpemVfX2NvbnRlbnQtY29udGFpbmVyIC5jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcGFkZGluZzogMDtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuaW1hZ2UtdGVhc2VyLWZ1bGwtc2l6ZV9fY29udGVudC1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICB0b3A6IDA7XG4gIH1cbn1cbi5pbWFnZS10ZWFzZXItZnVsbC1zaXplX190ZXh0LWJveCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7XG4gIGNvbG9yOiAjNGI0YjRkO1xuICBwYWRkaW5nOiAxLjVyZW07XG4gIG1hcmdpbi10b3A6IGF1dG87XG59XG4uaW1hZ2UtdGVhc2VyLWZ1bGwtc2l6ZV9fdGV4dC1ib3ggc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmltYWdlLXRlYXNlci1mdWxsLXNpemVfX3RleHQtYm94IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIzNiwgMjM2LCAyMzYsIDAuODUpO1xuICAgIGNvbG9yOiAjNGI0YjRkO1xuICAgIG1heC13aWR0aDogMjJyZW07XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogMXJlbTtcbiAgfVxuICAuaW1hZ2UtdGVhc2VyLWZ1bGwtc2l6ZV9fdGV4dC1ib3ggc3ZnIHtcbiAgICBmaWxsOiAjNGI0YjRkO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogMTIwMHB4KSB7XG4gIC5pbWFnZS10ZWFzZXItZnVsbC1zaXplX190ZXh0LWJveCB7XG4gICAgbGVmdDogMXJlbTtcbiAgfVxufVxuLmltYWdlLXRlYXNlci1mdWxsLXNpemVfX3RleHQtYm94LS1sZWZ0IHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDM1cHg7XG59XG4uaW1hZ2UtdGVhc2VyLWZ1bGwtc2l6ZV9fdGV4dC1ib3gtLXJpZ2h0IHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMzVweDtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGVuZDtcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kO1xufVxuLmltYWdlLXRlYXNlci1mdWxsLXNpemVfX3RleHQtYm94LS1ub25lIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5pbWFnZS10ZWFzZXItZnVsbC1zaXplX19oZWFkbGluZSB7XG4gIGZvbnQtc2l6ZTogMi4yNjY2NjY2NjY3cmVtO1xuICBsaW5lLWhlaWdodDogMi42NjY2NjY2NjY3cmVtO1xuICBmb250LXdlaWdodDogMzAwO1xufVxuLmltYWdlLXRlYXNlci1mdWxsLXNpemVfX3RleHQge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNnJlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5pbWFnZS10ZWFzZXItZnVsbC1zaXplX19idXR0b24ge1xuICBmb250LXNpemU6IDEuMDY2NjY2NjY2N3JlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDY2NjY2NjY2N3JlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmltYWdlLXRleHQtdGVhc2VyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItLWlzLXRyYW5zcGFyZW50OjphZnRlciwgLmltYWdlLXRleHQtdGVhc2VyLS1pcy1ncmF5OjphZnRlciwgLmltYWdlLXRleHQtdGVhc2VyLS1pcy13aGl0ZTo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxNTB2dztcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiAtMTtcbiAgbGVmdDogLTUwdnc7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItLWlzLXRyYW5zcGFyZW50OjphZnRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItLWlzLWdyYXk6OmFmdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbn1cbi5pbWFnZS10ZXh0LXRlYXNlci0taXMtd2hpdGU6OmFmdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbi5pbWFnZS10ZXh0LXRlYXNlcl9faW1hZ2Uge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXJfX2ltYWdlIHtcbiAgICB3aWR0aDogNTAlO1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXJfX2ltYWdlIC5pbWFnZV9faW1hZ2Uge1xuICAtby1vYmplY3QtZml0OiBjb3ZlcjtcbiAgICAgb2JqZWN0LWZpdDogY292ZXI7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXJfX3RleHQtd3JhcHBlciB7XG4gIHBhZGRpbmc6IDAgMCAxLjA2NjY2NjY2NjdyZW0gMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyX190ZXh0LXdyYXBwZXIge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlcl9fdGV4dC13cmFwcGVyIHtcbiAgICBtYXJnaW46IDA7XG4gICAgd2lkdGg6IDUwJTtcbiAgICBwYWRkaW5nOiAwIDAgMC41cmVtIDA7XG4gIH1cbn1cbi5pbWFnZS10ZXh0LXRlYXNlcl9fdGV4dC1jb250YWluZXIge1xuICBwYWRkaW5nOiAwIDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXJfX3RleHQtY29udGFpbmVyIHtcbiAgICB3aWR0aDogMzhyZW07XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuLmltYWdlLXRleHQtdGVhc2VyX190ZXh0IHVsIHtcbiAgbWFyZ2luOiAxcmVtIDA7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItLXRleHRib3gtcG9zaXRpb24tbGVmdCB7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogcmV2ZXJzZTtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLS10ZXh0Ym94LXBvc2l0aW9uLWxlZnQge1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IHJldmVyc2U7XG4gICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gIH1cbn1cbi5pbWFnZS10ZXh0LXRlYXNlci0tdGV4dGJveC1wb3NpdGlvbi1sZWZ0IC5pbWFnZS10ZXh0LXRlYXNlcl9faW1hZ2Uge1xuICBwYWRkaW5nLWJvdHRvbTogMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci0tdGV4dGJveC1wb3NpdGlvbi1sZWZ0IC5pbWFnZS10ZXh0LXRlYXNlcl9faW1hZ2Uge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItLXRleHRib3gtcG9zaXRpb24tbGVmdCAuaW1hZ2UtdGV4dC10ZWFzZXJfX3RleHQtd3JhcHBlciB7XG4gICAgcGFkZGluZy1yaWdodDogNS4zMzMzMzMzMzMzcmVtO1xuICAgIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgfVxufVxuLmltYWdlLXRleHQtdGVhc2VyLS10ZXh0Ym94LXBvc2l0aW9uLXJpZ2h0IHtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLS10ZXh0Ym94LXBvc2l0aW9uLXJpZ2h0IHtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gICAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgfVxufVxuLmltYWdlLXRleHQtdGVhc2VyLS10ZXh0Ym94LXBvc2l0aW9uLXJpZ2h0IC5pbWFnZS10ZXh0LXRlYXNlcl9faW1hZ2Uge1xuICBwYWRkaW5nLXRvcDogMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci0tdGV4dGJveC1wb3NpdGlvbi1yaWdodCAuaW1hZ2UtdGV4dC10ZWFzZXJfX2ltYWdlIHtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLS10ZXh0Ym94LXBvc2l0aW9uLXJpZ2h0IC5pbWFnZS10ZXh0LXRlYXNlcl9fdGV4dC13cmFwcGVyIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDUuMzMzMzMzMzMzM3JlbTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItLXlvdXR1YmUtY29udGFpbmVyIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogNTAlO1xufVxuLmltYWdlLXRleHQtdGVhc2VyLS15b3V0dWJlLWNvbnRhaW5lciB2aWRlby1wbGF5ZXIge1xuICBwYWRkaW5nLWJvdHRvbTogY2FsYyg1MCUgKyAyLjVyZW0pO1xuICBwYWRkaW5nLXRvcDogMC41cmVtO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uaW1hZ2UtdGV4dC10ZWFzZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5pbWFnZS10ZXh0LXRlYXNlci0taXMtdHJhbnNwYXJlbnQ6OmFmdGVyLCAuaW1hZ2UtdGV4dC10ZWFzZXItLWlzLWdyYXk6OmFmdGVyLCAuaW1hZ2UtdGV4dC10ZWFzZXItLWlzLXdoaXRlOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDE1MHZ3O1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IC0xO1xuICBsZWZ0OiAtNTB2dztcbn1cbi5pbWFnZS10ZXh0LXRlYXNlci0taXMtdHJhbnNwYXJlbnQ6OmFmdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbn1cbi5pbWFnZS10ZXh0LXRlYXNlci0taXMtZ3JheTo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xufVxuLmltYWdlLXRleHQtdGVhc2VyLS1pcy13aGl0ZTo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuLmltYWdlLXRleHQtdGVhc2VyX19pbWFnZSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlcl9faW1hZ2Uge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbn1cbi5pbWFnZS10ZXh0LXRlYXNlcl9faW1hZ2UgLmltYWdlX19pbWFnZSB7XG4gIC1vLW9iamVjdC1maXQ6IGNvdmVyO1xuICAgICBvYmplY3QtZml0OiBjb3Zlcjtcbn1cbi5pbWFnZS10ZXh0LXRlYXNlcl9fdGV4dC13cmFwcGVyIHtcbiAgcGFkZGluZzogMCAwIDEuMDY2NjY2NjY2N3JlbSAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXJfX3RleHQtd3JhcHBlciB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyX190ZXh0LXdyYXBwZXIge1xuICAgIG1hcmdpbjogMDtcbiAgICB3aWR0aDogNTAlO1xuICAgIHBhZGRpbmc6IDAgMCAwLjVyZW0gMDtcbiAgfVxufVxuLmltYWdlLXRleHQtdGVhc2VyX190ZXh0LWNvbnRhaW5lciB7XG4gIHBhZGRpbmc6IDAgMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlcl9fdGV4dC1jb250YWluZXIge1xuICAgIHdpZHRoOiAzOHJlbTtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXJfX3RleHQgdWwge1xuICBtYXJnaW46IDFyZW0gMDtcbn1cbi5pbWFnZS10ZXh0LXRlYXNlci0tdGV4dGJveC1wb3NpdGlvbi1sZWZ0IHtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiByZXZlcnNlO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItLXRleHRib3gtcG9zaXRpb24tbGVmdCB7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogcmV2ZXJzZTtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgfVxufVxuLmltYWdlLXRleHQtdGVhc2VyLS10ZXh0Ym94LXBvc2l0aW9uLWxlZnQgLmltYWdlLXRleHQtdGVhc2VyX19pbWFnZSB7XG4gIHBhZGRpbmctYm90dG9tOiAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLS10ZXh0Ym94LXBvc2l0aW9uLWxlZnQgLmltYWdlLXRleHQtdGVhc2VyX19pbWFnZSB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci0tdGV4dGJveC1wb3NpdGlvbi1sZWZ0IC5pbWFnZS10ZXh0LXRlYXNlcl9fdGV4dC13cmFwcGVyIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiA1LjMzMzMzMzMzMzNyZW07XG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItLXRleHRib3gtcG9zaXRpb24tcmlnaHQge1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItLXRleHRib3gtcG9zaXRpb24tcmlnaHQge1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItLXRleHRib3gtcG9zaXRpb24tcmlnaHQgLmltYWdlLXRleHQtdGVhc2VyX19pbWFnZSB7XG4gIHBhZGRpbmctdG9wOiAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLS10ZXh0Ym94LXBvc2l0aW9uLXJpZ2h0IC5pbWFnZS10ZXh0LXRlYXNlcl9faW1hZ2Uge1xuICAgIHBhZGRpbmctdG9wOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItLXRleHRib3gtcG9zaXRpb24tcmlnaHQgLmltYWdlLXRleHQtdGVhc2VyX190ZXh0LXdyYXBwZXIge1xuICAgIHBhZGRpbmctbGVmdDogNS4zMzMzMzMzMzMzcmVtO1xuICAgIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gIH1cbn1cbi5pbWFnZS10ZXh0LXRlYXNlci0teW91dHViZS1jb250YWluZXIge1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiA1MCU7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItLXlvdXR1YmUtY29udGFpbmVyIHZpZGVvLXBsYXllciB7XG4gIHBhZGRpbmctYm90dG9tOiBjYWxjKDUwJSArIDIuNXJlbSk7XG4gIHBhZGRpbmctdG9wOiAwLjVyZW07XG59XG5cbi5pbWFnZS10ZXh0LXRlYXNlci0yNS03NSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmltYWdlLXRleHQtdGVhc2VyLTI1LTc1LS1pcy10cmFuc3BhcmVudDo6YWZ0ZXIsIC5pbWFnZS10ZXh0LXRlYXNlci0yNS03NS0taXMtZ3JheTo6YWZ0ZXIsIC5pbWFnZS10ZXh0LXRlYXNlci0yNS03NS0taXMtd2hpdGU6OmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMTUwdnc7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogLTE7XG4gIGxlZnQ6IC01MHZ3O1xufVxuLmltYWdlLXRleHQtdGVhc2VyLTI1LTc1LS1pcy10cmFuc3BhcmVudDo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xufVxuLmltYWdlLXRleHQtdGVhc2VyLTI1LTc1LS1pcy1ncmF5OjphZnRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItMjUtNzUtLWlzLXdoaXRlOjphZnRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItMjUtNzVfX2ltYWdlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLTI1LTc1X19pbWFnZSB7XG4gICAgd2lkdGg6IDUwJTtcbiAgfVxufVxuLmltYWdlLXRleHQtdGVhc2VyLTI1LTc1X19pbWFnZSAuaW1hZ2VfX2ltYWdlIHtcbiAgLW8tb2JqZWN0LWZpdDogY292ZXI7XG4gICAgIG9iamVjdC1maXQ6IGNvdmVyO1xufVxuLmltYWdlLXRleHQtdGVhc2VyLTI1LTc1X190ZXh0LXdyYXBwZXIge1xuICBwYWRkaW5nOiAwIDAgMS4wNjY2NjY2NjY3cmVtIDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci0yNS03NV9fdGV4dC13cmFwcGVyIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItMjUtNzVfX3RleHQtd3JhcHBlciB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHdpZHRoOiA1MCU7XG4gICAgcGFkZGluZzogMCAwIDAuNXJlbSAwO1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItMjUtNzVfX3RleHQtY29udGFpbmVyIHtcbiAgcGFkZGluZzogMCAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLTI1LTc1X190ZXh0LWNvbnRhaW5lciB7XG4gICAgd2lkdGg6IDM4cmVtO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbi5pbWFnZS10ZXh0LXRlYXNlci0yNS03NV9fdGV4dCB1bCB7XG4gIG1hcmdpbjogMXJlbSAwO1xufVxuLmltYWdlLXRleHQtdGVhc2VyLTI1LTc1LS10ZXh0Ym94LXBvc2l0aW9uLWxlZnQge1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IHJldmVyc2U7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci0yNS03NS0tdGV4dGJveC1wb3NpdGlvbi1sZWZ0IHtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gICAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiByZXZlcnNlO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItMjUtNzUtLXRleHRib3gtcG9zaXRpb24tbGVmdCAuaW1hZ2UtdGV4dC10ZWFzZXItMjUtNzVfX2ltYWdlIHtcbiAgcGFkZGluZy1ib3R0b206IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItMjUtNzUtLXRleHRib3gtcG9zaXRpb24tbGVmdCAuaW1hZ2UtdGV4dC10ZWFzZXItMjUtNzVfX2ltYWdlIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLTI1LTc1LS10ZXh0Ym94LXBvc2l0aW9uLWxlZnQgLmltYWdlLXRleHQtdGVhc2VyLTI1LTc1X190ZXh0LXdyYXBwZXIge1xuICAgIHBhZGRpbmctcmlnaHQ6IDUuMzMzMzMzMzMzM3JlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gIH1cbn1cbi5pbWFnZS10ZXh0LXRlYXNlci0yNS03NS0tdGV4dGJveC1wb3NpdGlvbi1yaWdodCB7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci0yNS03NS0tdGV4dGJveC1wb3NpdGlvbi1yaWdodCB7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIH1cbn1cbi5pbWFnZS10ZXh0LXRlYXNlci0yNS03NS0tdGV4dGJveC1wb3NpdGlvbi1yaWdodCAuaW1hZ2UtdGV4dC10ZWFzZXItMjUtNzVfX2ltYWdlIHtcbiAgcGFkZGluZy10b3A6IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItMjUtNzUtLXRleHRib3gtcG9zaXRpb24tcmlnaHQgLmltYWdlLXRleHQtdGVhc2VyLTI1LTc1X19pbWFnZSB7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci0yNS03NS0tdGV4dGJveC1wb3NpdGlvbi1yaWdodCAuaW1hZ2UtdGV4dC10ZWFzZXItMjUtNzVfX3RleHQtd3JhcHBlciB7XG4gICAgcGFkZGluZy1sZWZ0OiA1LjMzMzMzMzMzMzNyZW07XG4gICAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgfVxufVxuLmltYWdlLXRleHQtdGVhc2VyLTI1LTc1LS15b3V0dWJlLWNvbnRhaW5lciB7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDUwJTtcbn1cbi5pbWFnZS10ZXh0LXRlYXNlci0yNS03NS0teW91dHViZS1jb250YWluZXIgdmlkZW8tcGxheWVyIHtcbiAgcGFkZGluZy1ib3R0b206IGNhbGMoNTAlICsgMi41cmVtKTtcbiAgcGFkZGluZy10b3A6IDAuNXJlbTtcbn1cblxuLmltYWdlLXRleHQtdGVhc2VyLTI1LTc1IHtcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLTI1LTc1X19pbWFnZSB7XG4gICAgd2lkdGg6IDI3JTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItMjUtNzVfX3RleHQtd3JhcHBlciB7XG4gICAgLXdlYmtpdC1ib3gtYWxpZ246IGJhc2VsaW5lO1xuICAgICAgICAtbXMtZmxleC1hbGlnbjogYmFzZWxpbmU7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci0yNS03NV9fdGV4dC13cmFwcGVyIHtcbiAgICB3aWR0aDogNzMlO1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItMjUtNzVfX3RleHQtY29udGFpbmVyIHtcbiAgcGFkZGluZzogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci0yNS03NV9fdGV4dC1jb250YWluZXIge1xuICAgIHdpZHRoOiBhdXRvO1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItMjUtNzVfX3RleHQgdWwge1xuICBtYXJnaW46IDFyZW0gMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci0yNS03NS0tdGV4dGJveC1wb3NpdGlvbi1sZWZ0IC5pbWFnZS10ZXh0LXRlYXNlci0yNS03NV9fdGV4dC13cmFwcGVyIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci0yNS03NS0tdGV4dGJveC1wb3NpdGlvbi1yaWdodCAuaW1hZ2UtdGV4dC10ZWFzZXItMjUtNzVfX3RleHQtd3JhcHBlciB7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uaW1hZ2UtdGV4dC10ZWFzZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5pbWFnZS10ZXh0LXRlYXNlci0taXMtdHJhbnNwYXJlbnQ6OmFmdGVyLCAuaW1hZ2UtdGV4dC10ZWFzZXItLWlzLWdyYXk6OmFmdGVyLCAuaW1hZ2UtdGV4dC10ZWFzZXItLWlzLXdoaXRlOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDE1MHZ3O1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IC0xO1xuICBsZWZ0OiAtNTB2dztcbn1cbi5pbWFnZS10ZXh0LXRlYXNlci0taXMtdHJhbnNwYXJlbnQ6OmFmdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbn1cbi5pbWFnZS10ZXh0LXRlYXNlci0taXMtZ3JheTo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xufVxuLmltYWdlLXRleHQtdGVhc2VyLS1pcy13aGl0ZTo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuLmltYWdlLXRleHQtdGVhc2VyX19pbWFnZSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlcl9faW1hZ2Uge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbn1cbi5pbWFnZS10ZXh0LXRlYXNlcl9faW1hZ2UgLmltYWdlX19pbWFnZSB7XG4gIC1vLW9iamVjdC1maXQ6IGNvdmVyO1xuICAgICBvYmplY3QtZml0OiBjb3Zlcjtcbn1cbi5pbWFnZS10ZXh0LXRlYXNlcl9fdGV4dC13cmFwcGVyIHtcbiAgcGFkZGluZzogMCAwIDEuMDY2NjY2NjY2N3JlbSAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXJfX3RleHQtd3JhcHBlciB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyX190ZXh0LXdyYXBwZXIge1xuICAgIG1hcmdpbjogMDtcbiAgICB3aWR0aDogNTAlO1xuICAgIHBhZGRpbmc6IDAgMCAwLjVyZW0gMDtcbiAgfVxufVxuLmltYWdlLXRleHQtdGVhc2VyX190ZXh0LWNvbnRhaW5lciB7XG4gIHBhZGRpbmc6IDAgMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlcl9fdGV4dC1jb250YWluZXIge1xuICAgIHdpZHRoOiAzOHJlbTtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXJfX3RleHQgdWwge1xuICBtYXJnaW46IDFyZW0gMDtcbn1cbi5pbWFnZS10ZXh0LXRlYXNlci0tdGV4dGJveC1wb3NpdGlvbi1sZWZ0IHtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiByZXZlcnNlO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItLXRleHRib3gtcG9zaXRpb24tbGVmdCB7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogcmV2ZXJzZTtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgfVxufVxuLmltYWdlLXRleHQtdGVhc2VyLS10ZXh0Ym94LXBvc2l0aW9uLWxlZnQgLmltYWdlLXRleHQtdGVhc2VyX19pbWFnZSB7XG4gIHBhZGRpbmctYm90dG9tOiAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLS10ZXh0Ym94LXBvc2l0aW9uLWxlZnQgLmltYWdlLXRleHQtdGVhc2VyX19pbWFnZSB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci0tdGV4dGJveC1wb3NpdGlvbi1sZWZ0IC5pbWFnZS10ZXh0LXRlYXNlcl9fdGV4dC13cmFwcGVyIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiA1LjMzMzMzMzMzMzNyZW07XG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItLXRleHRib3gtcG9zaXRpb24tcmlnaHQge1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItLXRleHRib3gtcG9zaXRpb24tcmlnaHQge1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItLXRleHRib3gtcG9zaXRpb24tcmlnaHQgLmltYWdlLXRleHQtdGVhc2VyX19pbWFnZSB7XG4gIHBhZGRpbmctdG9wOiAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLS10ZXh0Ym94LXBvc2l0aW9uLXJpZ2h0IC5pbWFnZS10ZXh0LXRlYXNlcl9faW1hZ2Uge1xuICAgIHBhZGRpbmctdG9wOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItLXRleHRib3gtcG9zaXRpb24tcmlnaHQgLmltYWdlLXRleHQtdGVhc2VyX190ZXh0LXdyYXBwZXIge1xuICAgIHBhZGRpbmctbGVmdDogNS4zMzMzMzMzMzMzcmVtO1xuICAgIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gIH1cbn1cbi5pbWFnZS10ZXh0LXRlYXNlci0teW91dHViZS1jb250YWluZXIge1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiA1MCU7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItLXlvdXR1YmUtY29udGFpbmVyIHZpZGVvLXBsYXllciB7XG4gIHBhZGRpbmctYm90dG9tOiBjYWxjKDUwJSArIDIuNXJlbSk7XG4gIHBhZGRpbmctdG9wOiAwLjVyZW07XG59XG5cbi5pbWFnZS10ZXh0LXRlYXNlci01MC01MCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLS1pcy10cmFuc3BhcmVudDo6YWZ0ZXIsIC5pbWFnZS10ZXh0LXRlYXNlci01MC01MC0taXMtZ3JheTo6YWZ0ZXIsIC5pbWFnZS10ZXh0LXRlYXNlci01MC01MC0taXMtd2hpdGU6OmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMTUwdnc7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogLTE7XG4gIGxlZnQ6IC01MHZ3O1xufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLS1pcy10cmFuc3BhcmVudDo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLS1pcy1ncmF5OjphZnRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtLWlzLXdoaXRlOjphZnRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTBfX2ltYWdlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwX19pbWFnZSB7XG4gICAgd2lkdGg6IDUwJTtcbiAgfVxufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwX19pbWFnZSAuaW1hZ2VfX2ltYWdlIHtcbiAgLW8tb2JqZWN0LWZpdDogY292ZXI7XG4gICAgIG9iamVjdC1maXQ6IGNvdmVyO1xufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwX190ZXh0LXdyYXBwZXIge1xuICBwYWRkaW5nOiAwIDAgMS4wNjY2NjY2NjY3cmVtIDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci01MC01MF9fdGV4dC13cmFwcGVyIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTBfX3RleHQtd3JhcHBlciB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHdpZHRoOiA1MCU7XG4gICAgcGFkZGluZzogMCAwIDAuNXJlbSAwO1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTBfX3RleHQtY29udGFpbmVyIHtcbiAgcGFkZGluZzogMCAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwX190ZXh0LWNvbnRhaW5lciB7XG4gICAgd2lkdGg6IDM4cmVtO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbi5pbWFnZS10ZXh0LXRlYXNlci01MC01MF9fdGV4dCB1bCB7XG4gIG1hcmdpbjogMXJlbSAwO1xufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLS10ZXh0Ym94LXBvc2l0aW9uLWxlZnQge1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IHJldmVyc2U7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci01MC01MC0tdGV4dGJveC1wb3NpdGlvbi1sZWZ0IHtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gICAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiByZXZlcnNlO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtLXRleHRib3gtcG9zaXRpb24tbGVmdCAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTBfX2ltYWdlIHtcbiAgcGFkZGluZy1ib3R0b206IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtLXRleHRib3gtcG9zaXRpb24tbGVmdCAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTBfX2ltYWdlIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLS10ZXh0Ym94LXBvc2l0aW9uLWxlZnQgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwX190ZXh0LXdyYXBwZXIge1xuICAgIHBhZGRpbmctcmlnaHQ6IDUuMzMzMzMzMzMzM3JlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gIH1cbn1cbi5pbWFnZS10ZXh0LXRlYXNlci01MC01MC0tdGV4dGJveC1wb3NpdGlvbi1yaWdodCB7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci01MC01MC0tdGV4dGJveC1wb3NpdGlvbi1yaWdodCB7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIH1cbn1cbi5pbWFnZS10ZXh0LXRlYXNlci01MC01MC0tdGV4dGJveC1wb3NpdGlvbi1yaWdodCAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTBfX2ltYWdlIHtcbiAgcGFkZGluZy10b3A6IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtLXRleHRib3gtcG9zaXRpb24tcmlnaHQgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwX19pbWFnZSB7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci01MC01MC0tdGV4dGJveC1wb3NpdGlvbi1yaWdodCAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTBfX3RleHQtd3JhcHBlciB7XG4gICAgcGFkZGluZy1sZWZ0OiA1LjMzMzMzMzMzMzNyZW07XG4gICAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgfVxufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLS15b3V0dWJlLWNvbnRhaW5lciB7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDUwJTtcbn1cbi5pbWFnZS10ZXh0LXRlYXNlci01MC01MC0teW91dHViZS1jb250YWluZXIgdmlkZW8tcGxheWVyIHtcbiAgcGFkZGluZy1ib3R0b206IGNhbGMoNTAlICsgMi41cmVtKTtcbiAgcGFkZGluZy10b3A6IDAuNXJlbTtcbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTBfX3RleHQtd3JhcHBlciB7XG4gICAgLXdlYmtpdC1ib3gtcGFjazogZW5kO1xuICAgICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTBfX3RleHQtd3JhcHBlciB7XG4gICAgd2lkdGg6IDUwJTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLS10ZXh0Ym94LXBvc2l0aW9uLWxlZnQgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwX190ZXh0LXdyYXBwZXIge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogcmV2ZXJzZTtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci01MC01MC0tdGV4dGJveC1wb3NpdGlvbi1yaWdodCAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTBfX3RleHQtd3JhcHBlciB7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgfVxufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwX190ZXh0LWNvbnRhaW5lciB7XG4gIHBhZGRpbmc6IDA7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTBfX3RleHQgdWwge1xuICBtYXJnaW46IDFyZW0gMDtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmltYWdlLXRleHQtdGVhc2VyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItLWlzLXRyYW5zcGFyZW50OjphZnRlciwgLmltYWdlLXRleHQtdGVhc2VyLS1pcy1ncmF5OjphZnRlciwgLmltYWdlLXRleHQtdGVhc2VyLS1pcy13aGl0ZTo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxNTB2dztcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiAtMTtcbiAgbGVmdDogLTUwdnc7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItLWlzLXRyYW5zcGFyZW50OjphZnRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItLWlzLWdyYXk6OmFmdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbn1cbi5pbWFnZS10ZXh0LXRlYXNlci0taXMtd2hpdGU6OmFmdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbi5pbWFnZS10ZXh0LXRlYXNlcl9faW1hZ2Uge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXJfX2ltYWdlIHtcbiAgICB3aWR0aDogNTAlO1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXJfX2ltYWdlIC5pbWFnZV9faW1hZ2Uge1xuICAtby1vYmplY3QtZml0OiBjb3ZlcjtcbiAgICAgb2JqZWN0LWZpdDogY292ZXI7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXJfX3RleHQtd3JhcHBlciB7XG4gIHBhZGRpbmc6IDAgMCAxLjA2NjY2NjY2NjdyZW0gMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyX190ZXh0LXdyYXBwZXIge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlcl9fdGV4dC13cmFwcGVyIHtcbiAgICBtYXJnaW46IDA7XG4gICAgd2lkdGg6IDUwJTtcbiAgICBwYWRkaW5nOiAwIDAgMC41cmVtIDA7XG4gIH1cbn1cbi5pbWFnZS10ZXh0LXRlYXNlcl9fdGV4dC1jb250YWluZXIge1xuICBwYWRkaW5nOiAwIDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXJfX3RleHQtY29udGFpbmVyIHtcbiAgICB3aWR0aDogMzhyZW07XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuLmltYWdlLXRleHQtdGVhc2VyX190ZXh0IHVsIHtcbiAgbWFyZ2luOiAxcmVtIDA7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItLXRleHRib3gtcG9zaXRpb24tbGVmdCB7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogcmV2ZXJzZTtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLS10ZXh0Ym94LXBvc2l0aW9uLWxlZnQge1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IHJldmVyc2U7XG4gICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gIH1cbn1cbi5pbWFnZS10ZXh0LXRlYXNlci0tdGV4dGJveC1wb3NpdGlvbi1sZWZ0IC5pbWFnZS10ZXh0LXRlYXNlcl9faW1hZ2Uge1xuICBwYWRkaW5nLWJvdHRvbTogMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci0tdGV4dGJveC1wb3NpdGlvbi1sZWZ0IC5pbWFnZS10ZXh0LXRlYXNlcl9faW1hZ2Uge1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItLXRleHRib3gtcG9zaXRpb24tbGVmdCAuaW1hZ2UtdGV4dC10ZWFzZXJfX3RleHQtd3JhcHBlciB7XG4gICAgcGFkZGluZy1yaWdodDogNS4zMzMzMzMzMzMzcmVtO1xuICAgIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgfVxufVxuLmltYWdlLXRleHQtdGVhc2VyLS10ZXh0Ym94LXBvc2l0aW9uLXJpZ2h0IHtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLS10ZXh0Ym94LXBvc2l0aW9uLXJpZ2h0IHtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gICAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgfVxufVxuLmltYWdlLXRleHQtdGVhc2VyLS10ZXh0Ym94LXBvc2l0aW9uLXJpZ2h0IC5pbWFnZS10ZXh0LXRlYXNlcl9faW1hZ2Uge1xuICBwYWRkaW5nLXRvcDogMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci0tdGV4dGJveC1wb3NpdGlvbi1yaWdodCAuaW1hZ2UtdGV4dC10ZWFzZXJfX2ltYWdlIHtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLS10ZXh0Ym94LXBvc2l0aW9uLXJpZ2h0IC5pbWFnZS10ZXh0LXRlYXNlcl9fdGV4dC13cmFwcGVyIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDUuMzMzMzMzMzMzM3JlbTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItLXlvdXR1YmUtY29udGFpbmVyIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogNTAlO1xufVxuLmltYWdlLXRleHQtdGVhc2VyLS15b3V0dWJlLWNvbnRhaW5lciB2aWRlby1wbGF5ZXIge1xuICBwYWRkaW5nLWJvdHRvbTogY2FsYyg1MCUgKyAyLjVyZW0pO1xuICBwYWRkaW5nLXRvcDogMC41cmVtO1xufVxuXG4uaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5pbWFnZS10ZXh0LXRlYXNlci01MC01MC0taXMtdHJhbnNwYXJlbnQ6OmFmdGVyLCAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtLWlzLWdyYXk6OmFmdGVyLCAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtLWlzLXdoaXRlOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDE1MHZ3O1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IC0xO1xuICBsZWZ0OiAtNTB2dztcbn1cbi5pbWFnZS10ZXh0LXRlYXNlci01MC01MC0taXMtdHJhbnNwYXJlbnQ6OmFmdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbn1cbi5pbWFnZS10ZXh0LXRlYXNlci01MC01MC0taXMtZ3JheTo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLS1pcy13aGl0ZTo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwX19pbWFnZSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci01MC01MF9faW1hZ2Uge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbn1cbi5pbWFnZS10ZXh0LXRlYXNlci01MC01MF9faW1hZ2UgLmltYWdlX19pbWFnZSB7XG4gIC1vLW9iamVjdC1maXQ6IGNvdmVyO1xuICAgICBvYmplY3QtZml0OiBjb3Zlcjtcbn1cbi5pbWFnZS10ZXh0LXRlYXNlci01MC01MF9fdGV4dC13cmFwcGVyIHtcbiAgcGFkZGluZzogMCAwIDEuMDY2NjY2NjY2N3JlbSAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTBfX3RleHQtd3JhcHBlciB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwX190ZXh0LXdyYXBwZXIge1xuICAgIG1hcmdpbjogMDtcbiAgICB3aWR0aDogNTAlO1xuICAgIHBhZGRpbmc6IDAgMCAwLjVyZW0gMDtcbiAgfVxufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwX190ZXh0LWNvbnRhaW5lciB7XG4gIHBhZGRpbmc6IDAgMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci01MC01MF9fdGV4dC1jb250YWluZXIge1xuICAgIHdpZHRoOiAzOHJlbTtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTBfX3RleHQgdWwge1xuICBtYXJnaW46IDFyZW0gMDtcbn1cbi5pbWFnZS10ZXh0LXRlYXNlci01MC01MC0tdGV4dGJveC1wb3NpdGlvbi1sZWZ0IHtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiByZXZlcnNlO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtLXRleHRib3gtcG9zaXRpb24tbGVmdCB7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogcmV2ZXJzZTtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgfVxufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLS10ZXh0Ym94LXBvc2l0aW9uLWxlZnQgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwX19pbWFnZSB7XG4gIHBhZGRpbmctYm90dG9tOiAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLS10ZXh0Ym94LXBvc2l0aW9uLWxlZnQgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwX19pbWFnZSB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci01MC01MC0tdGV4dGJveC1wb3NpdGlvbi1sZWZ0IC5pbWFnZS10ZXh0LXRlYXNlci01MC01MF9fdGV4dC13cmFwcGVyIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiA1LjMzMzMzMzMzMzNyZW07XG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtLXRleHRib3gtcG9zaXRpb24tcmlnaHQge1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtLXRleHRib3gtcG9zaXRpb24tcmlnaHQge1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtLXRleHRib3gtcG9zaXRpb24tcmlnaHQgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwX19pbWFnZSB7XG4gIHBhZGRpbmctdG9wOiAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLS10ZXh0Ym94LXBvc2l0aW9uLXJpZ2h0IC5pbWFnZS10ZXh0LXRlYXNlci01MC01MF9faW1hZ2Uge1xuICAgIHBhZGRpbmctdG9wOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtLXRleHRib3gtcG9zaXRpb24tcmlnaHQgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwX190ZXh0LXdyYXBwZXIge1xuICAgIHBhZGRpbmctbGVmdDogNS4zMzMzMzMzMzMzcmVtO1xuICAgIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gIH1cbn1cbi5pbWFnZS10ZXh0LXRlYXNlci01MC01MC0teW91dHViZS1jb250YWluZXIge1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiA1MCU7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtLXlvdXR1YmUtY29udGFpbmVyIHZpZGVvLXBsYXllciB7XG4gIHBhZGRpbmctYm90dG9tOiBjYWxjKDUwJSArIDIuNXJlbSk7XG4gIHBhZGRpbmctdG9wOiAwLjVyZW07XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwX190ZXh0LXdyYXBwZXIge1xuICAgIC13ZWJraXQtYm94LXBhY2s6IGVuZDtcbiAgICAgICAgLW1zLWZsZXgtcGFjazogZW5kO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwX190ZXh0LXdyYXBwZXIge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci01MC01MC0tdGV4dGJveC1wb3NpdGlvbi1sZWZ0IC5pbWFnZS10ZXh0LXRlYXNlci01MC01MF9fdGV4dC13cmFwcGVyIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IHJldmVyc2U7XG4gICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtLXRleHRib3gtcG9zaXRpb24tcmlnaHQgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwX190ZXh0LXdyYXBwZXIge1xuICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gIH1cbn1cbi5pbWFnZS10ZXh0LXRlYXNlci01MC01MF9fdGV4dC1jb250YWluZXIge1xuICBwYWRkaW5nOiAwO1xufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwX190ZXh0IHVsIHtcbiAgbWFyZ2luOiAxcmVtIDA7XG59XG5cbi5pbWFnZS10ZXh0LXRlYXNlci01MC01MC1zbWFsbCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLXNtYWxsLS1pcy10cmFuc3BhcmVudDo6YWZ0ZXIsIC5pbWFnZS10ZXh0LXRlYXNlci01MC01MC1zbWFsbC0taXMtZ3JheTo6YWZ0ZXIsIC5pbWFnZS10ZXh0LXRlYXNlci01MC01MC1zbWFsbC0taXMtd2hpdGU6OmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMTUwdnc7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogLTE7XG4gIGxlZnQ6IC01MHZ3O1xufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLXNtYWxsLS1pcy10cmFuc3BhcmVudDo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLXNtYWxsLS1pcy1ncmF5OjphZnRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtc21hbGwtLWlzLXdoaXRlOjphZnRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtc21hbGxfX2ltYWdlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLXNtYWxsX19pbWFnZSB7XG4gICAgd2lkdGg6IDUwJTtcbiAgfVxufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLXNtYWxsX19pbWFnZSAuaW1hZ2VfX2ltYWdlIHtcbiAgLW8tb2JqZWN0LWZpdDogY292ZXI7XG4gICAgIG9iamVjdC1maXQ6IGNvdmVyO1xufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLXNtYWxsX190ZXh0LXdyYXBwZXIge1xuICBwYWRkaW5nOiAwIDAgMS4wNjY2NjY2NjY3cmVtIDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci01MC01MC1zbWFsbF9fdGV4dC13cmFwcGVyIHtcbiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtc21hbGxfX3RleHQtd3JhcHBlciB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHdpZHRoOiA1MCU7XG4gICAgcGFkZGluZzogMCAwIDAuNXJlbSAwO1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtc21hbGxfX3RleHQtY29udGFpbmVyIHtcbiAgcGFkZGluZzogMCAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLXNtYWxsX190ZXh0LWNvbnRhaW5lciB7XG4gICAgd2lkdGg6IDM4cmVtO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbi5pbWFnZS10ZXh0LXRlYXNlci01MC01MC1zbWFsbF9fdGV4dCB1bCB7XG4gIG1hcmdpbjogMXJlbSAwO1xufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLXNtYWxsLS10ZXh0Ym94LXBvc2l0aW9uLWxlZnQge1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IHJldmVyc2U7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci01MC01MC1zbWFsbC0tdGV4dGJveC1wb3NpdGlvbi1sZWZ0IHtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gICAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiByZXZlcnNlO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtc21hbGwtLXRleHRib3gtcG9zaXRpb24tbGVmdCAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtc21hbGxfX2ltYWdlIHtcbiAgcGFkZGluZy1ib3R0b206IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtc21hbGwtLXRleHRib3gtcG9zaXRpb24tbGVmdCAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtc21hbGxfX2ltYWdlIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLXNtYWxsLS10ZXh0Ym94LXBvc2l0aW9uLWxlZnQgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLXNtYWxsX190ZXh0LXdyYXBwZXIge1xuICAgIHBhZGRpbmctcmlnaHQ6IDUuMzMzMzMzMzMzM3JlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gIH1cbn1cbi5pbWFnZS10ZXh0LXRlYXNlci01MC01MC1zbWFsbC0tdGV4dGJveC1wb3NpdGlvbi1yaWdodCB7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci01MC01MC1zbWFsbC0tdGV4dGJveC1wb3NpdGlvbi1yaWdodCB7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIH1cbn1cbi5pbWFnZS10ZXh0LXRlYXNlci01MC01MC1zbWFsbC0tdGV4dGJveC1wb3NpdGlvbi1yaWdodCAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtc21hbGxfX2ltYWdlIHtcbiAgcGFkZGluZy10b3A6IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtc21hbGwtLXRleHRib3gtcG9zaXRpb24tcmlnaHQgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLXNtYWxsX19pbWFnZSB7XG4gICAgcGFkZGluZy10b3A6IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci01MC01MC1zbWFsbC0tdGV4dGJveC1wb3NpdGlvbi1yaWdodCAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtc21hbGxfX3RleHQtd3JhcHBlciB7XG4gICAgcGFkZGluZy1sZWZ0OiA1LjMzMzMzMzMzMzNyZW07XG4gICAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgfVxufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLXNtYWxsLS15b3V0dWJlLWNvbnRhaW5lciB7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDUwJTtcbn1cbi5pbWFnZS10ZXh0LXRlYXNlci01MC01MC1zbWFsbC0teW91dHViZS1jb250YWluZXIgdmlkZW8tcGxheWVyIHtcbiAgcGFkZGluZy1ib3R0b206IGNhbGMoNTAlICsgMi41cmVtKTtcbiAgcGFkZGluZy10b3A6IDAuNXJlbTtcbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtc21hbGxfX3RleHQtd3JhcHBlciB7XG4gICAgLXdlYmtpdC1ib3gtcGFjazogZW5kO1xuICAgICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtc21hbGxfX3RleHQtd3JhcHBlciB7XG4gICAgd2lkdGg6IDUwJTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLXNtYWxsLS10ZXh0Ym94LXBvc2l0aW9uLWxlZnQgLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLXNtYWxsX190ZXh0LXdyYXBwZXIge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogcmV2ZXJzZTtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci01MC01MC1zbWFsbC0tdGV4dGJveC1wb3NpdGlvbi1yaWdodCAuaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtc21hbGxfX3RleHQtd3JhcHBlciB7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgfVxufVxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLXNtYWxsX190ZXh0LWNvbnRhaW5lciB7XG4gIHBhZGRpbmc6IDA7XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtc21hbGxfX3RleHQgdWwge1xuICBtYXJnaW46IDFyZW0gMDtcbn1cblxuLmltYWdlLXRleHQtdGVhc2VyLTUwLTUwLXNtYWxsIHtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5pbWFnZS10ZXh0LXRlYXNlci01MC01MC1zbWFsbF9faW1hZ2Uge1xuICAgIHdpZHRoOiA1MCU7XG4gICAgaGVpZ2h0OiAxOS4xMzMzMzMzMzMzcmVtO1xuICB9XG59XG4uaW1hZ2UtdGV4dC10ZWFzZXItNTAtNTAtc21hbGxfX3RleHQgdWwge1xuICBtYXJnaW46IDFyZW0gMDtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLm1vZGFsLXdpbmRvdyB7XG4gIHotaW5kZXg6IDIwMDA7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBvcGFjaXR5OiAwO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAwLjI1cywgb3BhY2l0eSAwLjI1cyAwcywgLXdlYmtpdC10cmFuc2Zvcm0gMC4yNXM7XG4gIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMHMgbGluZWFyIDAuMjVzLCBvcGFjaXR5IDAuMjVzIDBzLCAtd2Via2l0LXRyYW5zZm9ybSAwLjI1cztcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcyBsaW5lYXIgMC4yNXMsIG9wYWNpdHkgMC4yNXMgMHMsIHRyYW5zZm9ybSAwLjI1cztcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcyBsaW5lYXIgMC4yNXMsIG9wYWNpdHkgMC4yNXMgMHMsIHRyYW5zZm9ybSAwLjI1cywgLXdlYmtpdC10cmFuc2Zvcm0gMC4yNXM7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLm1vZGFsLXdpbmRvd19fb3ZlcmxheSB7XG4gIHotaW5kZXg6IDEwMDA7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBvcGFjaXR5OiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xuICAtd2Via2l0LXRyYW5zaXRpb246IHZpc2liaWxpdHkgMHMgbGluZWFyIDAuMjVzLCBvcGFjaXR5IDAuMjVzIDBzLCAtd2Via2l0LXRyYW5zZm9ybSAwLjI1cztcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcyBsaW5lYXIgMC4yNXMsIG9wYWNpdHkgMC4yNXMgMHMsIC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAwLjI1cywgb3BhY2l0eSAwLjI1cyAwcywgdHJhbnNmb3JtIDAuMjVzO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAwLjI1cywgb3BhY2l0eSAwLjI1cyAwcywgdHJhbnNmb3JtIDAuMjVzLCAtd2Via2l0LXRyYW5zZm9ybSAwLjI1cztcbn1cbi5tb2RhbC13aW5kb3dfX292ZXJsYXlfYmx1ciB7XG4gIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDVweCk7XG4gICAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDVweCk7XG59XG4ubW9kYWwtd2luZG93X19jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogNTAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAxMDAlO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAubW9kYWwtd2luZG93X19jb250YWluZXIge1xuICAgIGhlaWdodDogOTAlO1xuICAgIHdpZHRoOiA5MCU7XG4gIH1cbn1cbi5tb2RhbC13aW5kb3dfX2hlYWRlciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogMC43NXJlbSAxLjVyZW07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5tb2RhbC13aW5kb3dfX2hlYWRlciAuaGVhZGxpbmUge1xuICBkaXNwbGF5OiAtd2Via2l0LWlubGluZS1ib3g7XG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDIuNHJlbSk7XG4gIGZvbnQtc2l6ZTogMS40NjY2NjY2NjY3cmVtO1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAubW9kYWwtd2luZG93X19oZWFkZXIgLmhlYWRsaW5lIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogMi40cmVtO1xuICB9XG59XG4ubW9kYWwtd2luZG93X19jbG9zZS1idXR0b24tY29udGFpbmVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMDtcbiAgdG9wOiAwO1xufVxuLm1vZGFsLXdpbmRvd19fY2xvc2UtYnV0dG9uLWNvbnRhaW5lciAuaWNvbi1idXR0b24ge1xuICB3aWR0aDogMS42NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDEuNjY2NjY2NjY2N3JlbTtcbiAgbWFyZ2luOiAwLjVyZW07XG59XG4ubW9kYWwtd2luZG93X19jbG9zZS1idXR0b24tY29udGFpbmVyIC5pY29uLWJ1dHRvbl9faWNvbi1jb250YWluZXIge1xuICB3aWR0aDogMS42NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDEuNjY2NjY2NjY2N3JlbTtcbn1cbi5tb2RhbC13aW5kb3dfX2Nsb3NlLWJ1dHRvbi1jb250YWluZXIgLmljb24tYnV0dG9uIC5pY29uLS1jbG9zZSB7XG4gIHdpZHRoOiAxLjY2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMS42NjY2NjY2NjY3cmVtO1xufVxuLm1vZGFsLXdpbmRvd19fY2xvc2UtYnV0dG9uLWNvbnRhaW5lciAuaWNvbi1idXR0b24gLmljb24tLWNsb3NlIHN2ZyB7XG4gIHdpZHRoOiAxLjY2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMS42NjY2NjY2NjY3cmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAubW9kYWwtd2luZG93X19jbG9zZS1idXR0b24tY29udGFpbmVyIC5pY29uLWJ1dHRvbiB7XG4gICAgd2lkdGg6IDFyZW07XG4gICAgaGVpZ2h0OiAxcmVtO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBtYXJnaW46IDAuNzVyZW07XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLm1vZGFsLXdpbmRvd19fY2xvc2UtYnV0dG9uLWNvbnRhaW5lciAuaWNvbi1idXR0b25fX2ljb24tY29udGFpbmVyIHtcbiAgICB3aWR0aDogMXJlbTtcbiAgICBoZWlnaHQ6IDFyZW07XG4gIH1cbiAgLm1vZGFsLXdpbmRvd19fY2xvc2UtYnV0dG9uLWNvbnRhaW5lciAuaWNvbi1idXR0b24gLmljb24tLWNsb3NlIHtcbiAgICB3aWR0aDogMXJlbTtcbiAgICBoZWlnaHQ6IDFyZW07XG4gIH1cbiAgLm1vZGFsLXdpbmRvd19fY2xvc2UtYnV0dG9uLWNvbnRhaW5lciAuaWNvbi1idXR0b24gLmljb24tLWNsb3NlIHN2ZyB7XG4gICAgd2lkdGg6IDFyZW07XG4gICAgaGVpZ2h0OiAxcmVtO1xuICB9XG59XG4ubW9kYWwtd2luZG93X19jb250ZW50IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdzogYXV0bztcbiAgcGFkZGluZzogMi41cmVtIDEuNXJlbSAxLjVyZW07XG59XG4ubW9kYWwtd2luZG93X19jb250ZW50OjphZnRlciB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20ocmdiYSgyNTUsIDI1NSwgMjU1LCAwKSksIGNvbG9yLXN0b3AoOTAlLCByZ2IoMjU1LCAyNTUsIDI1NSkpKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSwgcmdiKDI1NSwgMjU1LCAyNTUpIDkwJSk7XG59XG4ubW9kYWwtd2luZG93X19hY3RpdmUge1xuICBvcGFjaXR5OiAxO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAwcywgb3BhY2l0eSAwLjI1cyAwcywgLXdlYmtpdC10cmFuc2Zvcm0gMC4yNXM7XG4gIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMHMgbGluZWFyIDBzLCBvcGFjaXR5IDAuMjVzIDBzLCAtd2Via2l0LXRyYW5zZm9ybSAwLjI1cztcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcyBsaW5lYXIgMHMsIG9wYWNpdHkgMC4yNXMgMHMsIHRyYW5zZm9ybSAwLjI1cztcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcyBsaW5lYXIgMHMsIG9wYWNpdHkgMC4yNXMgMHMsIHRyYW5zZm9ybSAwLjI1cywgLXdlYmtpdC10cmFuc2Zvcm0gMC4yNXM7XG59XG4ubW9kYWwtd2luZG93LS1tZWRpdW0gLm1vZGFsLXdpbmRvd19fY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiA2NS4zMzMzMzMzMzMzcmVtO1xufVxuLm1vZGFsLXdpbmRvdyAubW9kYWwtd2luZG93X19jbG9zZS13aW5kb3cgLmJ1dHRvbiB7XG4gIGJvcmRlci1yYWRpdXM6IHVuc2V0O1xufVxuLm1vZGFsLXdpbmRvdy0tcHJvZHVjdC1jb25maWd1cmF0b3IgLm1vZGFsLXdpbmRvd19fY29udGFpbmVyIHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAubW9kYWwtd2luZG93LS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAubW9kYWwtd2luZG93X19jb250YWluZXIge1xuICAgIG1heC13aWR0aDogNzUlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICBoZWlnaHQ6IDUwJTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLm1vZGFsLXdpbmRvdy0tcHJvZHVjdC1jb25maWd1cmF0b3IgLm1vZGFsLXdpbmRvd19fY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDYwMHB4O1xuICAgIGxlZnQ6IDUwJTtcbiAgICBoZWlnaHQ6IDUwJTtcbiAgfVxufVxuLm1vZGFsLXdpbmRvdy0tcHJvZHVjdC1jb25maWd1cmF0b3IgLm1vZGFsLXdpbmRvd19fY29udGFpbmVyIC5tb2RhbC13aW5kb3dfX2Nsb3NlLXdpbmRvdyB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubW9kYWwtd2luZG93LS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAubW9kYWwtd2luZG93X19jb250ZW50IHtcbiAgcGFkZGluZzogMS41cmVtIDEuNXJlbSAxLjVyZW07XG59XG4ubW9kYWwtd2luZG93LS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAubW9kYWwtd2luZG93X19oZWFkZXIgLmhlYWRsaW5lIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgbWFyZ2luLXRvcDogMXJlbTtcbn1cbi5tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yLXNtYWxsIC5tb2RhbC13aW5kb3dfX2NvbnRhaW5lciB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAubW9kYWwtd2luZG93LS1wcm9kdWN0LWNvbmZpZ3VyYXRvci1zbWFsbCAubW9kYWwtd2luZG93X19jb250YWluZXIge1xuICAgIHdpZHRoOiA1MCU7XG4gICAgbWF4LXdpZHRoOiAxMjAwcHg7XG4gICAgbWluLXdpZHRoOiBjYWxjKDEyMDBweCAvIDIpO1xuICAgIGhlaWdodDogMzAlO1xuICAgIG1pbi1oZWlnaHQ6IDE2LjY2NjY2NjY2NjdyZW07XG4gIH1cbn1cbi5tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yLXNtYWxsIC5tb2RhbC13aW5kb3dfX2hlYWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7XG59XG4ubW9kYWwtd2luZG93LS1wcm9kdWN0LWNvbmZpZ3VyYXRvci1zbWFsbCAubW9kYWwtd2luZG93X19jb250ZW50IHtcbiAgcGFkZGluZzogMS41cmVtIDRyZW0gMS41cmVtO1xufVxuLm1vZGFsLXdpbmRvdy0tcHJvZHVjdC1jb25maWd1cmF0b3Itbm8tZHJpdmVyIC5tb2RhbC13aW5kb3dfX2NvbnRhaW5lciB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAubW9kYWwtd2luZG93LS1wcm9kdWN0LWNvbmZpZ3VyYXRvci1uby1kcml2ZXIgLm1vZGFsLXdpbmRvd19fY29udGFpbmVyIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgbWluLWhlaWdodDogdW5zZXQ7XG4gIH1cbn1cbi5tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yLW5vLWRyaXZlciAubW9kYWwtd2luZG93X19jb250YWluZXIgLm1vZGFsLXdpbmRvd19fY2xvc2Utd2luZG93IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yLW5vLWRyaXZlciAubW9kYWwtd2luZG93X19jb250YWluZXIgLm1vZGFsLXdpbmRvd19fY2xvc2Utd2luZG93IHtcbiAgICAtd2Via2l0LWJveC1wYWNrOiBlbmQ7XG4gICAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIH1cbn1cbi5tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yLW5vLWRyaXZlciAubW9kYWwtd2luZG93X19jb250YWluZXIgLm1vZGFsLXdpbmRvd19fY2xvc2Utd2luZG93IC5idXR0b24ge1xuICBib3JkZXItcmFkaXVzOiAwLjY2NjY2NjY2NjdyZW07XG59XG4ubW9kYWwtd2luZG93LS1wcm9kdWN0LWNvbmZpZ3VyYXRvci1uby1kcml2ZXIgLm1vZGFsLXdpbmRvd19fbW9kYWwtYWN0aW9ucyB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIC8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbi5tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yLW5vLWRyaXZlciAubW9kYWwtd2luZG93X19tb2RhbC1hY3Rpb25zIC5tb3ZlLWZvcndhcmQge1xuICBtYXJnaW4tdG9wOiAwLjVyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yLW5vLWRyaXZlciAubW9kYWwtd2luZG93X19tb2RhbC1hY3Rpb25zIC5tb3ZlLWZvcndhcmQge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWxlZnQ6IDAuNXJlbTtcbiAgfVxufVxuLm1vZGFsLXdpbmRvdy0tcHJvZHVjdC1jb25maWd1cmF0b3Itbm8tZHJpdmVyIC5tb2RhbC13aW5kb3dfX2NvbnRlbnQge1xuICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5tb2RhbC13aW5kb3ctLXRyYWNrLWNvbmZpZ3VyYXRvciAubW9kYWwtd2luZG93X19jb250YWluZXIge1xuICAgIG1heC13aWR0aDogNjYuNjY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLm1vZGFsLXdpbmRvd19fcm9vbS12aWV3LWltYWdlLWNvbnRhaW5lciB7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLm1vZGFsLXdpbmRvd19fcm9vbS12aWV3LWltYWdlIHtcbiAgd2lkdGg6IC1tb3otZml0LWNvbnRlbnQ7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWNsYXJhdGlvbi1ibG9jay1uby1kdXBsaWNhdGUtcHJvcGVydGllcyAqL1xuICB3aWR0aDogLXdlYmtpdC1maXQtY29udGVudDtcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xufVxuLm1vZGFsLXdpbmRvdy0tcmltbGVzcyAubW9kYWwtd2luZG93X19jb250ZW50IHtcbiAgcGFkZGluZzogMi41cmVtIDAgMS41cmVtO1xufVxuLm1vZGFsLXdpbmRvdy0tc2ItaW1hZ2UgLm1vZGFsLXdpbmRvd19faW1hZ2Uge1xuICBtaW4td2lkdGg6IDEwMCU7XG59XG4ubW9kYWwtd2luZG93IC5zZXJ2aWNlLXNpZGViYXItY29udGVudCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLm1vZGFsLXdpbmRvdy0tZHluYW1pYy1jb250ZW50IC5tb2RhbC13aW5kb3dfX2NvbnRhaW5lciB7XG4gIGJvcmRlci13aWR0aDogM3B4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICNmZWNjMDA7XG4gIG1heC13aWR0aDogNTEuMnJlbTtcbiAgbWF4LWhlaWdodDogOTAlO1xuICBoZWlnaHQ6IGF1dG87XG59XG4ubW9kYWwtd2luZG93LS1keW5hbWljLWNvbnRlbnQgLm1vZGFsLXdpbmRvd19fY29udGVudCA+IC5jb250YWluZXIge1xuICBtYXJnaW46IDA7XG59XG4ubW9kYWwtd2luZG93LS1keW5hbWljLWNvbnRlbnQgLm5ld3NsZXR0ZXItZWxlbWVudCB7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cbi5tb2RhbC13aW5kb3ctLWR5bmFtaWMtY29udGVudCAubmV3c2xldHRlci1lbGVtZW50X19pbWFnZS1jb250YWluZXIge1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogdW5zZXQ7XG4gICAgICBmbGV4LWJhc2lzOiB1bnNldDtcbn1cblxuLm1hcmtldGluZy1tb2RhbC13aW5kb3cge1xuICB6LWluZGV4OiAyMDAwO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgb3BhY2l0eTogMDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS4xKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcyBsaW5lYXIgMC4yNXMsIG9wYWNpdHkgMC4yNXMgMHMsIC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAwLjI1cywgb3BhY2l0eSAwLjI1cyAwcywgLXdlYmtpdC10cmFuc2Zvcm0gMC4yNXM7XG4gIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMHMgbGluZWFyIDAuMjVzLCBvcGFjaXR5IDAuMjVzIDBzLCB0cmFuc2Zvcm0gMC4yNXM7XG4gIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMHMgbGluZWFyIDAuMjVzLCBvcGFjaXR5IDAuMjVzIDBzLCB0cmFuc2Zvcm0gMC4yNXMsIC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbi5tYXJrZXRpbmctbW9kYWwtd2luZG93X19vdmVybGF5IHtcbiAgei1pbmRleDogMTAwMDtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIG9wYWNpdHk6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS4xKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcyBsaW5lYXIgMC4yNXMsIG9wYWNpdHkgMC4yNXMgMHMsIC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAwLjI1cywgb3BhY2l0eSAwLjI1cyAwcywgLXdlYmtpdC10cmFuc2Zvcm0gMC4yNXM7XG4gIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMHMgbGluZWFyIDAuMjVzLCBvcGFjaXR5IDAuMjVzIDBzLCB0cmFuc2Zvcm0gMC4yNXM7XG4gIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMHMgbGluZWFyIDAuMjVzLCBvcGFjaXR5IDAuMjVzIDBzLCB0cmFuc2Zvcm0gMC4yNXMsIC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzO1xufVxuLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX292ZXJsYXlfYmx1ciB7XG4gIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDVweCk7XG4gICAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDVweCk7XG59XG4ubWFya2V0aW5nLW1vZGFsLXdpbmRvd19fY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBvaW50ZXItZXZlbnRzOiBhbGw7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IDUwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2NvbnRhaW5lciB7XG4gICAgaGVpZ2h0OiA5MCU7XG4gICAgd2lkdGg6IDkwJTtcbiAgfVxufVxuLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2hlYWRlciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogMC43NXJlbSAxLjVyZW07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5tYXJrZXRpbmctbW9kYWwtd2luZG93X19oZWFkZXIgLmhlYWRsaW5lIHtcbiAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtYm94O1xuICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLSAyLjRyZW0pO1xuICBmb250LXNpemU6IDEuNDY2NjY2NjY2N3JlbTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2hlYWRlciAuaGVhZGxpbmUge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAyLjRyZW07XG4gIH1cbn1cbi5tYXJrZXRpbmctbW9kYWwtd2luZG93X19jbG9zZS1idXR0b24tY29udGFpbmVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMDtcbiAgdG9wOiAwO1xufVxuLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2Nsb3NlLWJ1dHRvbi1jb250YWluZXIgLmljb24tYnV0dG9uIHtcbiAgd2lkdGg6IDEuNjY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAxLjY2NjY2NjY2NjdyZW07XG4gIG1hcmdpbjogMC41cmVtO1xufVxuLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2Nsb3NlLWJ1dHRvbi1jb250YWluZXIgLmljb24tYnV0dG9uX19pY29uLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxLjY2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMS42NjY2NjY2NjY3cmVtO1xufVxuLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2Nsb3NlLWJ1dHRvbi1jb250YWluZXIgLmljb24tYnV0dG9uIC5pY29uLS1jbG9zZSB7XG4gIHdpZHRoOiAxLjY2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogMS42NjY2NjY2NjY3cmVtO1xufVxuLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2Nsb3NlLWJ1dHRvbi1jb250YWluZXIgLmljb24tYnV0dG9uIC5pY29uLS1jbG9zZSBzdmcge1xuICB3aWR0aDogMS42NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDEuNjY2NjY2NjY2N3JlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2Nsb3NlLWJ1dHRvbi1jb250YWluZXIgLmljb24tYnV0dG9uIHtcbiAgICB3aWR0aDogMXJlbTtcbiAgICBoZWlnaHQ6IDFyZW07XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG1hcmdpbjogMC43NXJlbTtcbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgfVxuICAubWFya2V0aW5nLW1vZGFsLXdpbmRvd19fY2xvc2UtYnV0dG9uLWNvbnRhaW5lciAuaWNvbi1idXR0b25fX2ljb24tY29udGFpbmVyIHtcbiAgICB3aWR0aDogMXJlbTtcbiAgICBoZWlnaHQ6IDFyZW07XG4gIH1cbiAgLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2Nsb3NlLWJ1dHRvbi1jb250YWluZXIgLmljb24tYnV0dG9uIC5pY29uLS1jbG9zZSB7XG4gICAgd2lkdGg6IDFyZW07XG4gICAgaGVpZ2h0OiAxcmVtO1xuICB9XG4gIC5tYXJrZXRpbmctbW9kYWwtd2luZG93X19jbG9zZS1idXR0b24tY29udGFpbmVyIC5pY29uLWJ1dHRvbiAuaWNvbi0tY2xvc2Ugc3ZnIHtcbiAgICB3aWR0aDogMXJlbTtcbiAgICBoZWlnaHQ6IDFyZW07XG4gIH1cbn1cbi5tYXJrZXRpbmctbW9kYWwtd2luZG93X19jb250ZW50IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdzogYXV0bztcbiAgcGFkZGluZzogMi41cmVtIDEuNXJlbSAxLjVyZW07XG59XG4ubWFya2V0aW5nLW1vZGFsLXdpbmRvd19fY29udGVudDo6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkpLCBjb2xvci1zdG9wKDkwJSwgcmdiKDI1NSwgMjU1LCAyNTUpKSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCksIHJnYigyNTUsIDI1NSwgMjU1KSA5MCUpO1xufVxuLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2FjdGl2ZSB7XG4gIG9wYWNpdHk6IDE7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAtd2Via2l0LXRyYW5zaXRpb246IHZpc2liaWxpdHkgMHMgbGluZWFyIDBzLCBvcGFjaXR5IDAuMjVzIDBzLCAtd2Via2l0LXRyYW5zZm9ybSAwLjI1cztcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcyBsaW5lYXIgMHMsIG9wYWNpdHkgMC4yNXMgMHMsIC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAwcywgb3BhY2l0eSAwLjI1cyAwcywgdHJhbnNmb3JtIDAuMjVzO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAwcywgb3BhY2l0eSAwLjI1cyAwcywgdHJhbnNmb3JtIDAuMjVzLCAtd2Via2l0LXRyYW5zZm9ybSAwLjI1cztcbn1cbi5tYXJrZXRpbmctbW9kYWwtd2luZG93LS1tZWRpdW0gLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2NvbnRhaW5lciB7XG4gIG1heC13aWR0aDogNjUuMzMzMzMzMzMzM3JlbTtcbn1cbi5tYXJrZXRpbmctbW9kYWwtd2luZG93IC5tYXJrZXRpbmctbW9kYWwtd2luZG93X19jbG9zZS13aW5kb3cgLmJ1dHRvbiB7XG4gIGJvcmRlci1yYWRpdXM6IHVuc2V0O1xufVxuLm1hcmtldGluZy1tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yIC5tYXJrZXRpbmctbW9kYWwtd2luZG93X19jb250YWluZXIge1xuICBoZWlnaHQ6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5tYXJrZXRpbmctbW9kYWwtd2luZG93LS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAubWFya2V0aW5nLW1vZGFsLXdpbmRvd19fY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDc1JTtcbiAgICBsZWZ0OiA1MCU7XG4gICAgaGVpZ2h0OiA1MCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5tYXJrZXRpbmctbW9kYWwtd2luZG93LS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAubWFya2V0aW5nLW1vZGFsLXdpbmRvd19fY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDYwMHB4O1xuICAgIGxlZnQ6IDUwJTtcbiAgICBoZWlnaHQ6IDUwJTtcbiAgfVxufVxuLm1hcmtldGluZy1tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yIC5tYXJrZXRpbmctbW9kYWwtd2luZG93X19jb250YWluZXIgLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2Nsb3NlLXdpbmRvdyB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ubWFya2V0aW5nLW1vZGFsLXdpbmRvdy0tcHJvZHVjdC1jb25maWd1cmF0b3IgLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2NvbnRlbnQge1xuICBwYWRkaW5nOiAxLjVyZW0gMS41cmVtIDEuNXJlbTtcbn1cbi5tYXJrZXRpbmctbW9kYWwtd2luZG93LS1wcm9kdWN0LWNvbmZpZ3VyYXRvciAubWFya2V0aW5nLW1vZGFsLXdpbmRvd19faGVhZGVyIC5oZWFkbGluZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBmb250LXNpemU6IDJyZW07XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIG1hcmdpbi10b3A6IDFyZW07XG59XG4ubWFya2V0aW5nLW1vZGFsLXdpbmRvdy0tcHJvZHVjdC1jb25maWd1cmF0b3Itc21hbGwgLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2NvbnRhaW5lciB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAubWFya2V0aW5nLW1vZGFsLXdpbmRvdy0tcHJvZHVjdC1jb25maWd1cmF0b3Itc21hbGwgLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2NvbnRhaW5lciB7XG4gICAgd2lkdGg6IDUwJTtcbiAgICBtYXgtd2lkdGg6IDEyMDBweDtcbiAgICBtaW4td2lkdGg6IGNhbGMoMTIwMHB4IC8gMik7XG4gICAgaGVpZ2h0OiAzMCU7XG4gICAgbWluLWhlaWdodDogMTYuNjY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLm1hcmtldGluZy1tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yLXNtYWxsIC5tYXJrZXRpbmctbW9kYWwtd2luZG93X19oZWFkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjO1xufVxuLm1hcmtldGluZy1tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yLXNtYWxsIC5tYXJrZXRpbmctbW9kYWwtd2luZG93X19jb250ZW50IHtcbiAgcGFkZGluZzogMS41cmVtIDRyZW0gMS41cmVtO1xufVxuLm1hcmtldGluZy1tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yLW5vLWRyaXZlciAubWFya2V0aW5nLW1vZGFsLXdpbmRvd19fY29udGFpbmVyIHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5tYXJrZXRpbmctbW9kYWwtd2luZG93LS1wcm9kdWN0LWNvbmZpZ3VyYXRvci1uby1kcml2ZXIgLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2NvbnRhaW5lciB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIG1pbi1oZWlnaHQ6IHVuc2V0O1xuICB9XG59XG4ubWFya2V0aW5nLW1vZGFsLXdpbmRvdy0tcHJvZHVjdC1jb25maWd1cmF0b3Itbm8tZHJpdmVyIC5tYXJrZXRpbmctbW9kYWwtd2luZG93X19jb250YWluZXIgLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2Nsb3NlLXdpbmRvdyB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAubWFya2V0aW5nLW1vZGFsLXdpbmRvdy0tcHJvZHVjdC1jb25maWd1cmF0b3Itbm8tZHJpdmVyIC5tYXJrZXRpbmctbW9kYWwtd2luZG93X19jb250YWluZXIgLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2Nsb3NlLXdpbmRvdyB7XG4gICAgLXdlYmtpdC1ib3gtcGFjazogZW5kO1xuICAgICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICB9XG59XG4ubWFya2V0aW5nLW1vZGFsLXdpbmRvdy0tcHJvZHVjdC1jb25maWd1cmF0b3Itbm8tZHJpdmVyIC5tYXJrZXRpbmctbW9kYWwtd2luZG93X19jb250YWluZXIgLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2Nsb3NlLXdpbmRvdyAuYnV0dG9uIHtcbiAgYm9yZGVyLXJhZGl1czogMC42NjY2NjY2NjY3cmVtO1xufVxuLm1hcmtldGluZy1tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yLW5vLWRyaXZlciAubWFya2V0aW5nLW1vZGFsLXdpbmRvd19fbW9kYWwtYWN0aW9ucyB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIC8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbi5tYXJrZXRpbmctbW9kYWwtd2luZG93LS1wcm9kdWN0LWNvbmZpZ3VyYXRvci1uby1kcml2ZXIgLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX21vZGFsLWFjdGlvbnMgLm1vdmUtZm9yd2FyZCB7XG4gIG1hcmdpbi10b3A6IDAuNXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm1hcmtldGluZy1tb2RhbC13aW5kb3ctLXByb2R1Y3QtY29uZmlndXJhdG9yLW5vLWRyaXZlciAubWFya2V0aW5nLW1vZGFsLXdpbmRvd19fbW9kYWwtYWN0aW9ucyAubW92ZS1mb3J3YXJkIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAwLjVyZW07XG4gIH1cbn1cbi5tYXJrZXRpbmctbW9kYWwtd2luZG93LS1wcm9kdWN0LWNvbmZpZ3VyYXRvci1uby1kcml2ZXIgLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2NvbnRlbnQge1xuICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5tYXJrZXRpbmctbW9kYWwtd2luZG93LS10cmFjay1jb25maWd1cmF0b3IgLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2NvbnRhaW5lciB7XG4gICAgbWF4LXdpZHRoOiA2Ni42NjY2NjY2NjY3cmVtO1xuICB9XG59XG4ubWFya2V0aW5nLW1vZGFsLXdpbmRvd19fcm9vbS12aWV3LWltYWdlLWNvbnRhaW5lciB7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX3Jvb20tdmlldy1pbWFnZSB7XG4gIHdpZHRoOiAtbW96LWZpdC1jb250ZW50O1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVjbGFyYXRpb24tYmxvY2stbm8tZHVwbGljYXRlLXByb3BlcnRpZXMgKi9cbiAgd2lkdGg6IC13ZWJraXQtZml0LWNvbnRlbnQ7XG4gIHdpZHRoOiBmaXQtY29udGVudDtcbn1cbi5tYXJrZXRpbmctbW9kYWwtd2luZG93LS1yaW1sZXNzIC5tYXJrZXRpbmctbW9kYWwtd2luZG93X19jb250ZW50IHtcbiAgcGFkZGluZzogMi41cmVtIDAgMS41cmVtO1xufVxuLm1hcmtldGluZy1tb2RhbC13aW5kb3ctLXNiLWltYWdlIC5tYXJrZXRpbmctbW9kYWwtd2luZG93X19pbWFnZSB7XG4gIG1pbi13aWR0aDogMTAwJTtcbn1cbi5tYXJrZXRpbmctbW9kYWwtd2luZG93IC5zZXJ2aWNlLXNpZGViYXItY29udGVudCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLm1hcmtldGluZy1tb2RhbC13aW5kb3ctLWR5bmFtaWMtY29udGVudCAubWFya2V0aW5nLW1vZGFsLXdpbmRvd19fY29udGFpbmVyIHtcbiAgYm9yZGVyLXdpZHRoOiAzcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2ZlY2MwMDtcbiAgbWF4LXdpZHRoOiA1MS4ycmVtO1xuICBtYXgtaGVpZ2h0OiA5MCU7XG4gIGhlaWdodDogYXV0bztcbn1cbi5tYXJrZXRpbmctbW9kYWwtd2luZG93LS1keW5hbWljLWNvbnRlbnQgLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2NvbnRlbnQgPiAuY29udGFpbmVyIHtcbiAgbWFyZ2luOiAwO1xufVxuLm1hcmtldGluZy1tb2RhbC13aW5kb3ctLWR5bmFtaWMtY29udGVudCAubmV3c2xldHRlci1lbGVtZW50IHtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuLm1hcmtldGluZy1tb2RhbC13aW5kb3ctLWR5bmFtaWMtY29udGVudCAubmV3c2xldHRlci1lbGVtZW50X19pbWFnZS1jb250YWluZXIge1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogdW5zZXQ7XG4gICAgICBmbGV4LWJhc2lzOiB1bnNldDtcbn1cblxuLm1hcmtldGluZy1tb2RhbC13aW5kb3dfX2NvbnRlbnQtY29udGFpbmVyLS1oYXMtZXJyb3Ige1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5ld3NsZXR0ZXItZWxlbWVudCB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gICAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiByZXZlcnNlO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICAgIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIH1cbn1cbi5uZXdzbGV0dGVyLWVsZW1lbnRfX2hlYWRsaW5lcyB7XG4gIG1hcmdpbi10b3A6IDFyZW07XG59XG4ubmV3c2xldHRlci1lbGVtZW50X190b3AtZm9ybS1jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IDEwMCU7XG59XG4ubmV3c2xldHRlci1lbGVtZW50X190b3AtZm9ybS1jb250YWluZXIgLnRleHQtZmllbGRfX2xhYmVsIHtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4ubmV3c2xldHRlci1lbGVtZW50X19uYW1lLWZpZWxkcyB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgbWFyZ2luLXRvcDogMXJlbTtcbn1cbi5uZXdzbGV0dGVyLWVsZW1lbnRfX25hbWUtZmllbGRzIC50ZXh0LWZpZWxkIHtcbiAgd2lkdGg6IDUwJTtcbn1cbi5uZXdzbGV0dGVyLWVsZW1lbnRfX25hbWUtZmllbGRzIC50ZXh0LWZpZWxkOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XG59XG4ubmV3c2xldHRlci1lbGVtZW50IC5idXR0b24ge1xuICBwYWRkaW5nOiAwIDAuNzVyZW07XG59XG4ubmV3c2xldHRlci1lbGVtZW50IC5idXR0b25fX2xhYmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiAjMDAwO1xuICBtYXJnaW4tcmlnaHQ6IDAuNXJlbTtcbn1cbi5uZXdzbGV0dGVyLWVsZW1lbnQgLmJ1dHRvbl9fbGFiZWwtY29udGFpbmVyIC5pY29uIHtcbiAgbWFyZ2luOiAwO1xufVxuLm5ld3NsZXR0ZXItZWxlbWVudCAuYnV0dG9uX19sYWJlbC1jb250YWluZXIgc3ZnIHtcbiAgd2lkdGg6IDEuMzMzMzMzMzMzM3JlbTtcbiAgaGVpZ2h0OiAxLjMzMzMzMzMzMzNyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5uZXdzbGV0dGVyLWVsZW1lbnRfX2NvbnRhaW5lciB7XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGNhbGMoMTAwJSAtIDIxcmVtKTtcbiAgICAgICAgZmxleC1iYXNpczogY2FsYygxMDAlIC0gMjFyZW0pO1xuICAgIG1heC13aWR0aDogNTAlO1xuICAgIHBhZGRpbmctcmlnaHQ6IDAuMjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5uZXdzbGV0dGVyLWVsZW1lbnRfX2NvbnRhaW5lciB7XG4gICAgbWF4LXdpZHRoOiAzOCU7XG4gIH1cbn1cbi5uZXdzbGV0dGVyLWVsZW1lbnRfX2ltYWdlLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMThyZW07XG4gICAgICBmbGV4LWJhc2lzOiAxOHJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm5ld3NsZXR0ZXItZWxlbWVudF9faW1hZ2UtY29udGFpbmVyIHtcbiAgICAtd2Via2l0LWJveC1mbGV4OiAwO1xuICAgICAgICAtbXMtZmxleC1wb3NpdGl2ZTogMDtcbiAgICAgICAgICAgIGZsZXgtZ3JvdzogMDtcbiAgICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDI4cmVtO1xuICAgICAgICBmbGV4LWJhc2lzOiAyOHJlbTtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuMjVyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5uZXdzbGV0dGVyLWVsZW1lbnRfX2ltYWdlLWNvbnRhaW5lciB7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IHJldmVyc2U7XG4gICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDM3Ljg2NjY2NjY2NjdyZW07XG4gICAgICAgIGZsZXgtYmFzaXM6IDM3Ljg2NjY2NjY2NjdyZW07XG4gIH1cbn1cbi5uZXdzbGV0dGVyLWVsZW1lbnRfX2ltYWdlLWNvbnRhaW5lci0tY2VudGVyIHtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmV3c2xldHRlci1lbGVtZW50X19pbWFnZS1jb250YWluZXIgLmltYWdlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxLjMzMzMzMzMzMzNyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5uZXdzbGV0dGVyLWVsZW1lbnRfX2ltYWdlLWNvbnRhaW5lciAuaW1hZ2Uge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cbi5uZXdzbGV0dGVyLWVsZW1lbnRfX3JlZ2lzdHJhdGlvbi1mb3JtIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbGluZS1oZWlnaHQ6IGluaXRpYWw7XG59XG4ubmV3c2xldHRlci1lbGVtZW50X19yZWdpc3RyYXRpb24tZm9ybSAudGV4dC1maWVsZF9fbGFiZWwge1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5uZXdzbGV0dGVyLWVsZW1lbnRfX3JlZ2lzdHJhdGlvbi1mb3JtIC5jdXN0b20tc2VsZWN0IHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICBtYXJnaW4tdG9wOiAxcmVtO1xufVxuLm5ld3NsZXR0ZXItZWxlbWVudF9fcmVnaXN0cmF0aW9uLWZvcm0gLmN1c3RvbS1zZWxlY3RfX3NlbGVjdCB7XG4gIHdpZHRoOiAxMDAlO1xuICBjb2xvcjogIzRiNGI0ZDtcbn1cbi5uZXdzbGV0dGVyLWVsZW1lbnRfX3JlZ2lzdHJhdGlvbi1mb3JtIC5zZWxlY3QyLWNvbnRhaW5lciB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbn1cbi5uZXdzbGV0dGVyLWVsZW1lbnRfX3JlZ2lzdHJhdGlvbi1mb3JtIC5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1zZWxlY3Rpb24ge1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbi5uZXdzbGV0dGVyLWVsZW1lbnRfX3JlZ2lzdHJhdGlvbi1mb3JtIC5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkIHtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4ubmV3c2xldHRlci1lbGVtZW50X19yZWdpc3RyYXRpb24tZm9ybSAuY2hlY2tib3gge1xuICB3aWR0aDogMTAwJTtcbn1cbi5uZXdzbGV0dGVyLWVsZW1lbnRfX3JlZ2lzdHJhdGlvbi1mb3JtIC5jaGVja2JveF9fY2hlY2sge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG59XG4ubmV3c2xldHRlci1lbGVtZW50X19yZWdpc3RyYXRpb24tZm9ybSAuY2hlY2tib3hfX2xhYmVsIHtcbiAgZm9udC1zaXplOiAwLjczMzMzMzMzMzNyZW07XG4gIGxpbmUtaGVpZ2h0OiAxcmVtO1xuICBwYWRkaW5nLXRvcDogMC4zMzMzMzMzMzMzcmVtO1xufVxuLm5ld3NsZXR0ZXItZWxlbWVudF9fcmVnaXN0cmF0aW9uLWZvcm0gLmNoZWNrYm94X19ib3gge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGJhc2VsaW5lO1xuICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7XG4gIGJvcmRlcjogMC4wNjY2NjY2NjY3cmVtIHNvbGlkICM0YjRiNGQ7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAxLjZyZW07XG4gIGhlaWdodDogMS42cmVtO1xufVxuLm5ld3NsZXR0ZXItZWxlbWVudF9fcmVnaXN0cmF0aW9uLWZvcm0gLmZvcm1fX3JlcXVpcmVkLW5vdGUge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbi5uZXdzbGV0dGVyLWVsZW1lbnQgLmlucHV0LWJ1dHRvbiB7XG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLXRvcDogMnJlbTtcbn1cbi5uZXdzbGV0dGVyLWVsZW1lbnQgLmZvcm0tcmVzcG9uc2VfX3N1Y2Nlc3MsIC5uZXdzbGV0dGVyLWVsZW1lbnQgLmZvcm0tcmVzcG9uc2VfX2Vycm9yIHtcbiAgcGFkZGluZzogMXJlbTtcbiAgbWFyZ2luLXRvcDogMC4yNXJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xufVxuLm5ld3NsZXR0ZXItZWxlbWVudCAuZm9ybS1yZXNwb25zZV9fc3VjY2Vzczo6YmVmb3JlLCAubmV3c2xldHRlci1lbGVtZW50IC5mb3JtLXJlc3BvbnNlX19lcnJvcjo6YmVmb3JlIHtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG59XG4ubmV3c2xldHRlci1lbGVtZW50IC5mb3JtLXJlc3BvbnNlX19zdWNjZXNzIC5saXN0X19pdGVtLCAubmV3c2xldHRlci1lbGVtZW50IC5mb3JtLXJlc3BvbnNlX19lcnJvciAubGlzdF9faXRlbSB7XG4gIHBhZGRpbmctbGVmdDogMDtcbn1cbi5uZXdzbGV0dGVyLWVsZW1lbnQgLmZvcm0tcmVzcG9uc2VfX3N1Y2Nlc3MgLmljb24sIC5uZXdzbGV0dGVyLWVsZW1lbnQgLmZvcm0tcmVzcG9uc2VfX2Vycm9yIC5pY29uIHtcbiAgZm9udC1zaXplOiAycmVtO1xuICBtYXJnaW4tdG9wOiAwO1xufVxuLm5ld3NsZXR0ZXItZWxlbWVudF9fY2hlY2sge1xuICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICBoZWlnaHQ6IDAgIWltcG9ydGFudDtcbiAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbn1cbi5uZXdzbGV0dGVyLWVsZW1lbnRfX2NoZWNrICoge1xuICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICBoZWlnaHQ6IDAgIWltcG9ydGFudDtcbiAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgYm9yZGVyOiBub25lO1xufVxuLm5ld3NsZXR0ZXItZWxlbWVudC0tbW9kYWwgLm5ld3NsZXR0ZXItZWxlbWVudF9fY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiB1bnNldDtcbiAgcGFkZGluZzogMS41cmVtO1xufVxuLm5ld3NsZXR0ZXItZWxlbWVudC0tbW9kYWwgLm5ld3NsZXR0ZXItZWxlbWVudF9fcmVnaXN0cmF0aW9uLWNvbnRhaW5lciB7XG4gIHBhZGRpbmc6IDAgMS41cmVtO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4ubmV3c2xldHRlci1lbGVtZW50LS1tb2RhbCAubmV3c2xldHRlci1lbGVtZW50X19yZWdpc3RyYXRpb24tY29udGFpbmVyIC5jdXN0b20tc2VsZWN0IHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi5uZXdzbGV0dGVyLWVsZW1lbnQtLW1vZGFsIC5uZXdzbGV0dGVyLWVsZW1lbnRfX3JlZ2lzdHJhdGlvbi1jb250YWluZXIgLnRleHQtZmllbGQge1xuICBtYXJnaW4tdG9wOiAxcmVtO1xufVxuLm5ld3NsZXR0ZXItZWxlbWVudC0tbW9kYWwgLm5ld3NsZXR0ZXItZWxlbWVudF9fYWN0aW9uLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgcGFkZGluZy10b3A6IDFyZW07XG59XG4ubmV3c2xldHRlci1lbGVtZW50LS1tb2RhbCAudGV4dC1maWVsZCB7XG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLXRvcDogMnJlbTtcbn1cbi5uZXdzbGV0dGVyLWVsZW1lbnQtLW1vZGFsIC5idXR0b24ge1xuICBwYWRkaW5nOiAwLjhyZW0gMS4zMzMzMzMzMzMzcmVtO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucHJvZHVjdC1jYXRlZ29yeS10ZWFzZXItYm94IHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLnByb2R1Y3QtY2F0ZWdvcnktdGVhc2VyLWJveF9faW1hZ2Uge1xuICB3aWR0aDogNi42NjY2NjY2NjY3cmVtO1xuICBoZWlnaHQ6IDYuNjY2NjY2NjY2N3JlbTtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG4ucHJvZHVjdC1jYXRlZ29yeS10ZWFzZXItYm94X19pbWFnZSAuaW1hZ2VfX2ltYWdlIHtcbiAgLW8tb2JqZWN0LWZpdDogY29udGFpbjtcbiAgICAgb2JqZWN0LWZpdDogY29udGFpbjtcbn1cbi5wcm9kdWN0LWNhdGVnb3J5LXRlYXNlci1ib3hfX2xpbmsge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiAxLjA2NjY2NjY2NjdyZW07XG4gIGNvbG9yOiAjNGI0YjRkO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5wcm9kdWN0LWNhdGVnb3J5LXRlYXNlci1ib3hfX2xpbms6aG92ZXIge1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtaGVyby10ZWFzZXJfX2NvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiByZXZlcnNlO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogOHJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLWhlcm8tdGVhc2VyX19jb250YWluZXIge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtaGVyby10ZWFzZXJfX2NvbnRhaW5lcjo6YmVmb3JlIHtcbiAgY29udGVudDogXCJcIjtcbiAgd2lkdGg6IDIwMHZ3O1xuICBoZWlnaHQ6IDEyMCU7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgxNTBkZWcsICM0YjRiNGQsICMxYTE3MWIpO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVjbGFyYXRpb24tYmxvY2stbm8tZHVwbGljYXRlLXByb3BlcnRpZXMgKi9cbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2Fzc2V0cy9pbWFnZXMvZ3JhaW5fcGF0dGVybi5wbmdcIiksIGxpbmVhci1ncmFkaWVudCgxNTBkZWcsICM0YjRiNGQsICMxYTE3MWIpO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IC0xO1xuICBsZWZ0OiAtNTB2dztcbiAgdG9wOiAtMTAlO1xuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDVkZWcpO1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDVkZWcpO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtaGVyby10ZWFzZXJfX2NvbnRhaW5lcjo6YmVmb3JlIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgdG9wOiAtMTUlO1xuICB9XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtaGVyby10ZWFzZXJfX2ltYWdlLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG4gICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgd2lkdGg6IDEwMCU7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtaGVyby10ZWFzZXJfX2ltYWdlLWNvbnRhaW5lciAuaW1hZ2UtZWxlbWVudCB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleC1wb3NpdGl2ZTogMTtcbiAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgd2lkdGg6IGF1dG87XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtaGVyby10ZWFzZXJfX2ltYWdlLWNvbnRhaW5lciAuaW1hZ2UtZWxlbWVudDpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogLTIwJTtcbiAgbWFyZ2luLXJpZ2h0OiAtMTUlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtaGVyby10ZWFzZXJfX2ltYWdlLWNvbnRhaW5lciAuaW1hZ2UtZWxlbWVudCB7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLWhlcm8tdGVhc2VyX19pbWFnZS1jb250YWluZXIgLmltYWdlLWVsZW1lbnQ6Zmlyc3QtY2hpbGQge1xuICAgIG1heC13aWR0aDogNjAlO1xuICB9XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS1oZXJvLXRlYXNlcl9faW1hZ2UtY29udGFpbmVyIC5pbWFnZS1lbGVtZW50Omxhc3QtY2hpbGQge1xuICAgIG1hcmdpbjogMDtcbiAgICBtYXJnaW4tbGVmdDogLTEycmVtO1xuICB9XG59XG5AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpLCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtaGVyby10ZWFzZXJfX2ltYWdlLWNvbnRhaW5lciAuaW1hZ2UtZWxlbWVudDpmaXJzdC1jaGlsZCB7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtaGVyby10ZWFzZXJfX2ltYWdlLWNvbnRhaW5lciAuaW1hZ2UtZWxlbWVudCB7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLWhlcm8tdGVhc2VyX19pbWFnZS1jb250YWluZXIgLmltYWdlLWVsZW1lbnQ6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWxlZnQ6IC0xNXJlbTtcbiAgfVxufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLWhlcm8tdGVhc2VyX190ZXh0LWNvbnRhaW5lciB7XG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0YXJ0O1xuICAgICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcbiAgY29sb3I6ICNmZmY7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS1oZXJvLXRlYXNlcl9fdGV4dC1jb250YWluZXIge1xuICAgIG1hcmdpbi10b3A6IDhyZW07XG4gICAgbWF4LXdpZHRoOiA0MCU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiAxMDIzcHgpIHtcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLWhlcm8tdGVhc2VyX190ZXh0LWNvbnRhaW5lciB7XG4gICAgbWFyZ2luLXRvcDogMXJlbTtcbiAgfVxufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLWhlcm8tdGVhc2VyX190ZXh0LWNvbnRhaW5lciAuaGVhZGxpbmUge1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgbGluZS1oZWlnaHQ6IDEuMTtcbiAgY29sb3I6ICNmZmY7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtaGVyby10ZWFzZXJfX3RleHQtY29udGFpbmVyIC5oZWFkbGluZS0taDEge1xuICBmb250LXNpemU6IDNyZW07XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtaGVyby10ZWFzZXJfX3RleHQtY29udGFpbmVyIC5oZWFkbGluZS0tc3ViaGVhZGxpbmUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtaGVyby10ZWFzZXJfX3RleHQge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnByb2R1Y3QtbGFuZGluZy1wYWdlLWluZm8tYm94IHtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci1jb2xvcjogI2ZlY2MwMDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDYuNjY2NjY2NjY2N3JlbTtcbiAgcGFkZGluZzogMXJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY5cHgpIHtcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLWluZm8tYm94IHtcbiAgICB3aWR0aDogNTAlO1xuICAgIHBhZGRpbmc6IDNyZW07XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIH1cbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS1pbmZvLWJveCAuaGVhZGxpbmUge1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX19jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXRlYXNlcl9fY29udGFpbmVyLnByb2R1Y3QtbGFuZGluZy1wYWdlLXRlYXNlcl9fb3ZlcmxhcCB7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXRlYXNlcl9fY29udGFpbmVyLnByb2R1Y3QtbGFuZGluZy1wYWdlLXRlYXNlcl9fb3ZlcmxhcC1iZWZvcmUge1xuICAgIG1hcmdpbi10b3A6IC02cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjVweCkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX19jb250YWluZXIucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX19vdmVybGFwIHtcbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICAgIC8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgfVxuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX19jb250YWluZXIucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX19vdmVybGFwLWJlZm9yZSB7XG4gICAgbWFyZ2luLXRvcDogLTdyZW07XG4gIH1cbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXRlYXNlcl9fY29udGFpbmVyLnByb2R1Y3QtbGFuZGluZy1wYWdlLXRlYXNlcl9fb3ZlcmxhcC1hZnRlciB7XG4gICAgbWFyZ2luLWJvdHRvbTogLTEycmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDE0MDBweCkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX19jb250YWluZXIucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX19vdmVybGFwIHtcbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgfVxuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX19jb250YWluZXIucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX19vdmVybGFwLWJlZm9yZSB7XG4gICAgbWFyZ2luLXRvcDogLThyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTkyMHB4KSB7XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS10ZWFzZXJfX2NvbnRhaW5lci5wcm9kdWN0LWxhbmRpbmctcGFnZS10ZWFzZXJfX292ZXJsYXAge1xuICAgIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICB9XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS10ZWFzZXJfX2NvbnRhaW5lci5wcm9kdWN0LWxhbmRpbmctcGFnZS10ZWFzZXJfX292ZXJsYXAtYmVmb3JlIHtcbiAgICBtYXJnaW4tdG9wOiAtOXJlbTtcbiAgfVxufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLXRlYXNlcl9fY29udGFpbmVyOm5vdCgucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyLS13aXRoLWltYWdlKS5wcm9kdWN0LWxhbmRpbmctcGFnZS10ZWFzZXJfX292ZXJsYXAge1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogMTAyNXB4KSB7XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS10ZWFzZXJfX2NvbnRhaW5lcjpub3QoLnByb2R1Y3QtbGFuZGluZy1wYWdlLXRlYXNlci0td2l0aC1pbWFnZSkucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX19vdmVybGFwLWJlZm9yZSB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLXRlYXNlcl9fb3JpZW50YXRpb24tLWxlZnQge1xuICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS10ZWFzZXJfX29yaWVudGF0aW9uLS1yaWdodCB7XG4gIC13ZWJraXQtYm94LXBhY2s6IGVuZDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLXRlYXNlcl9fY29udGVudC1jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZzogM3JlbSAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX19jb250ZW50LWNvbnRhaW5lciB7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNXB4KSB7XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS10ZWFzZXJfX2NvbnRlbnQtY29udGFpbmVyLS13aXRoLWNvbm5lY3Rpb24ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLXRlYXNlcl9faW1hZ2UtY29udGFpbmVyIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS10ZWFzZXJfX2ltYWdlLWNvbnRhaW5lciB7XG4gICAgd2lkdGg6IDM1JTtcbiAgICBtYXJnaW46IDNyZW0gMnJlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX19pbWFnZS1jb250YWluZXIge1xuICAgIHdpZHRoOiAyNSU7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS10ZWFzZXJfX2ltYWdlLWNvbnRhaW5lciB7XG4gICAgd2lkdGg6IDI1JTtcbiAgICBtYXJnaW46IDdyZW0gNHJlbTtcbiAgfVxufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLXRlYXNlcl9faW1hZ2UtY29udGFpbmVyIC5pbWFnZS1lbGVtZW50IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLXRlYXNlcl9faW1hZ2UtY29udGFpbmVyIGltZyB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLXRlYXNlcl9faW1hZ2UtY29udGFpbmVyLS1yaWdodCB7XG4gIC13ZWJraXQtYm94LW9yZGluYWwtZ3JvdXA6IDM7XG4gICAgICAtbXMtZmxleC1vcmRlcjogMjtcbiAgICAgICAgICBvcmRlcjogMjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXRlYXNlcl9fdGV4dC1jb250YWluZXIge1xuICAgIG1heC13aWR0aDogNTAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjVweCkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX190ZXh0LWNvbnRhaW5lci0tYm90dG9tIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAwO1xuICB9XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX190ZXh0LWNvbnRhaW5lciAuaGVhZGxpbmUge1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgbGluZS1oZWlnaHQ6IDEuMTtcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS10ZWFzZXJfX3RleHQtY29udGFpbmVyIC5oZWFkbGluZS0tc3ViaGVhZGxpbmUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi10b3A6IDNyZW07XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX190ZXh0LWNvbnRhaW5lciAuaGVhZGxpbmUtLXN1YmhlYWRsaW5lIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS10ZWFzZXItLXdpdGgtaW1hZ2UgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXRlYXNlcl9fdGV4dC1jb250YWluZXIge1xuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGVuZDtcbiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS10ZWFzZXItLXdpdGgtaW1hZ2UgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXRlYXNlcl9fdGV4dC1jb250YWluZXIge1xuICAgIG1heC13aWR0aDogMzUlO1xuICB9XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX190ZXh0IHtcbiAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX190ZXh0LS1pbmRlbnQge1xuICBwYWRkaW5nLWxlZnQ6IDVyZW07XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX19jb25uZWN0b3ItaW1hZ2UtY29udGFpbmVyIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgbGluZS1oZWlnaHQ6IDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX19jb25uZWN0b3ItaW1hZ2UtY29udGFpbmVyIHtcbiAgICB3aWR0aDogNzAlO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjVweCkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX19jb25uZWN0b3ItaW1hZ2UtY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXRlYXNlcl9fY29ubmVjdG9yLWltYWdlLWNvbnRhaW5lci0tbGVmdCB7XG4gICAgbGVmdDogMDtcbiAgfVxuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdGVhc2VyX19jb25uZWN0b3ItaW1hZ2UtY29udGFpbmVyLS1yaWdodCB7XG4gICAgcmlnaHQ6IDA7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIH1cbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS10ZWFzZXIgLm1hcmtkb3duIHAge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uaW5zcGlyYXRpb24tY29udGVudCB7XG4gIHBhZGRpbmc6IDAuMTMzMzMzMzMzM3JlbTtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDEwMCU7XG4gICAgICBmbGV4LWJhc2lzOiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmluc3BpcmF0aW9uLWNvbnRlbnRfX2NvbnRhaW5lciB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQge1xuICAgIG1heC1oZWlnaHQ6IDMzLjMzMzMzMzMzMzNyZW07XG4gIH1cbn1cbi5pbnNwaXJhdGlvbi1jb250ZW50X19hc3NldCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gM3MgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpO1xuICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAzcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAzcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAzcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSksIC13ZWJraXQtdHJhbnNmb3JtIDNzIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKTtcbn1cbi5pbnNwaXJhdGlvbi1jb250ZW50X192YWx1ZSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHBhZGRpbmc6IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50X192YWx1ZSB7XG4gICAgcGFkZGluZzogM3JlbTtcbiAgfVxufVxuLmluc3BpcmF0aW9uLWNvbnRlbnQgLmhlYWRsaW5lIHtcbiAgLW1zLWZsZXgtaXRlbS1hbGlnbjogZW5kO1xuICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7XG4gIGNvbG9yOiAjZmZmO1xuICBmb250LXNpemU6IDEuNDY2NjY2NjY2N3JlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cbi5pbnNwaXJhdGlvbi1jb250ZW50X19wb2xhcmxpZ2h0IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLXdlYmtpdC1ib3gtcGFjazogZW5kO1xuICAgICAgLW1zLWZsZXgtcGFjazogZW5kO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIC13ZWJraXQtYm94LWZsZXg6IDI7XG4gICAgICAtbXMtZmxleC1wb3NpdGl2ZTogMjtcbiAgICAgICAgICBmbGV4LWdyb3c6IDI7XG59XG4uaW5zcGlyYXRpb24tY29udGVudF9fcG9sYXJsaWdodCAuaW5zcGlyYXRpb24tY29udGVudF9fc3VibGluZSxcbi5pbnNwaXJhdGlvbi1jb250ZW50X19wb2xhcmxpZ2h0IC5pbnNwaXJhdGlvbi1jb250ZW50X19zZXBhcmF0b3IsIC5pbnNwaXJhdGlvbi1jb250ZW50X19wb2xhcmxpZ2h0LWxpbmsge1xuICBkaXNwbGF5OiBub25lO1xuICBmb250LXdlaWdodDogNzAwO1xufVxuLmluc3BpcmF0aW9uLWNvbnRlbnRfX3BvbGFybGlnaHQtbGluayB7XG4gIGNvbG9yOiAjZmZmO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbi5pbnNwaXJhdGlvbi1jb250ZW50X19wb2xhcmxpZ2h0LWljb24ge1xuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpO1xuICBmb250LXNpemU6IDZyZW07XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbn1cbi5pbnNwaXJhdGlvbi1jb250ZW50X190ZXh0Ym94IC5pbnNwaXJhdGlvbi1jb250ZW50X19zdWJsaW5lLFxuLmluc3BpcmF0aW9uLWNvbnRlbnRfX3RleHRib3ggLmluc3BpcmF0aW9uLWNvbnRlbnRfX3NlcGFyYXRvcixcbi5pbnNwaXJhdGlvbi1jb250ZW50X190ZXh0Ym94IC5pbnNwaXJhdGlvbi1jb250ZW50X190ZXh0LFxuLmluc3BpcmF0aW9uLWNvbnRlbnRfX3RleHRib3ggLmluc3BpcmF0aW9uLWNvbnRlbnRfX2xpbmsge1xuICBkaXNwbGF5OiBub25lO1xufVxuLmluc3BpcmF0aW9uLWNvbnRlbnRfX3RleHRib3ggLmluc3BpcmF0aW9uLWNvbnRlbnRfX3N1YmxpbmUsXG4uaW5zcGlyYXRpb24tY29udGVudF9fdGV4dGJveCAuaW5zcGlyYXRpb24tY29udGVudF9fdGV4dCxcbi5pbnNwaXJhdGlvbi1jb250ZW50X190ZXh0Ym94IC5pbnNwaXJhdGlvbi1jb250ZW50X19saW5rIHtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cbi5pbnNwaXJhdGlvbi1jb250ZW50X190ZXh0Ym94IC5pbnNwaXJhdGlvbi1jb250ZW50X19saW5rLmJ1dHRvbi0tbGluayAuYnV0dG9uX19sYWJlbC1jb250YWluZXIge1xuICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbn1cbi5pbnNwaXJhdGlvbi1jb250ZW50X190ZXh0Ym94IC5pbnNwaXJhdGlvbi1jb250ZW50X19zZXBhcmF0b3Ige1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjOTI5MjkyO1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiAjOTI5MjkyO1xuICBtYXJnaW4tbGVmdDogLTAuNXJlbTtcbiAgd2lkdGg6IDRyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50X190ZXh0Ym94IC5pbnNwaXJhdGlvbi1jb250ZW50X19zZXBhcmF0b3Ige1xuICAgIG1hcmdpbi1sZWZ0OiAtMXJlbTtcbiAgfVxufVxuLmluc3BpcmF0aW9uLWNvbnRlbnQtLXNtYWxsIHtcbiAgLXdlYmtpdC1ib3gtZmxleDogMjtcbiAgICAgIC1tcy1mbGV4LXBvc2l0aXZlOiAyO1xuICAgICAgICAgIGZsZXgtZ3JvdzogMjtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDUwJTtcbiAgICAgIGZsZXgtYmFzaXM6IDUwJTtcbn1cbkBtZWRpYSBhbGwgYW5kICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSksICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSB7XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50LS1zbWFsbCB7XG4gICAgd2lkdGg6IGNhbGMoNTAlIC0gMC4yNjY2NjY2NjY3cmVtKTtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogY2FsYyg1MCUgLSAwLjI2NjY2NjY2NjdyZW0pO1xuICAgICAgICBmbGV4LWJhc2lzOiBjYWxjKDUwJSAtIDAuMjY2NjY2NjY2N3JlbSk7XG4gIH1cbn1cbi5pbnNwaXJhdGlvbi1jb250ZW50LS1tZWRpdW0sIC5pbnNwaXJhdGlvbi1jb250ZW50LS1tZWRpdW0tYmlnLCAuaW5zcGlyYXRpb24tY29udGVudC0tYmlnIHtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDEwMCU7XG4gICAgICBmbGV4LWJhc2lzOiAxMDAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuaW5zcGlyYXRpb24tY29udGVudCAuaGVhZGxpbmUge1xuICAgIHdpZHRoOiA3NSU7XG4gIH1cbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQtLXNtYWxsIHtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMzMuMzMzMzMzMzMzMyU7XG4gICAgICAgIGZsZXgtYmFzaXM6IDMzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50LS1zbWFsbCAuaGVhZGxpbmUge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50LS1tZWRpdW0ge1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiA1MCU7XG4gICAgICAgIGZsZXgtYmFzaXM6IDUwJTtcbiAgfVxuICAuaW5zcGlyYXRpb24tY29udGVudC0tbWVkaXVtLWJpZyB7XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDY2LjY2NjY2NjY2NjclO1xuICAgICAgICBmbGV4LWJhc2lzOiA2Ni42NjY2NjY2NjY3JTtcbiAgfVxuICAuaW5zcGlyYXRpb24tY29udGVudC0tYmlnIHtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMTAwJTtcbiAgICAgICAgZmxleC1iYXNpczogMTAwJTtcbiAgfVxuICAuaW5zcGlyYXRpb24tY29udGVudC0tbWVkaXVtLmluc3BpcmF0aW9uLWNvbnRlbnQtLWlzLXRleHRib3gsIC5pbnNwaXJhdGlvbi1jb250ZW50LS1tZWRpdW0tYmlnLmluc3BpcmF0aW9uLWNvbnRlbnQtLWlzLXRleHRib3gsIC5pbnNwaXJhdGlvbi1jb250ZW50LS1iaWcuaW5zcGlyYXRpb24tY29udGVudC0taXMtdGV4dGJveCB7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQtLW1lZGl1bS5pbnNwaXJhdGlvbi1jb250ZW50LS1pcy10ZXh0Ym94IC5idXR0b24tLXctYXV0bywgLmluc3BpcmF0aW9uLWNvbnRlbnQtLW1lZGl1bS1iaWcuaW5zcGlyYXRpb24tY29udGVudC0taXMtdGV4dGJveCAuYnV0dG9uLS13LWF1dG8sIC5pbnNwaXJhdGlvbi1jb250ZW50LS1iaWcuaW5zcGlyYXRpb24tY29udGVudC0taXMtdGV4dGJveCAuYnV0dG9uLS13LWF1dG8ge1xuICAgIG1heC13aWR0aDogNTAlO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICB9XG59XG5AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpLCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSkgYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50LS1zbWFsbCB7XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGNhbGMoMzMuMzMzMzMzMzMzMyUgLSAwLjI2NjY2NjY2NjdyZW0pO1xuICAgICAgICBmbGV4LWJhc2lzOiBjYWxjKDMzLjMzMzMzMzMzMzMlIC0gMC4yNjY2NjY2NjY3cmVtKTtcbiAgfVxuICAuaW5zcGlyYXRpb24tY29udGVudC0tbWVkaXVtIHtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogY2FsYyg1MCUgLSAwLjI2NjY2NjY2NjdyZW0pO1xuICAgICAgICBmbGV4LWJhc2lzOiBjYWxjKDUwJSAtIDAuMjY2NjY2NjY2N3JlbSk7XG4gIH1cbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQtLW1lZGl1bS1iaWcge1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBjYWxjKDY2LjY2NjY2NjY2NjclIC0gMC4yNjY2NjY2NjY3cmVtKTtcbiAgICAgICAgZmxleC1iYXNpczogY2FsYyg2Ni42NjY2NjY2NjY3JSAtIDAuMjY2NjY2NjY2N3JlbSk7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQtLWlzLXBvbGFybGlnaHQgLmluc3BpcmF0aW9uLWNvbnRlbnRfX3ZhbHVlIHtcbiAgICBwYWRkaW5nOiA0cmVtIDZyZW0gM3JlbSAzcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50OmhvdmVyIC5oZWFkbGluZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAuaW5zcGlyYXRpb24tY29udGVudDpob3ZlciAuaW5zcGlyYXRpb24tY29udGVudF9fYXNzZXQge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xuICB9XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50OmhvdmVyLmluc3BpcmF0aW9uLWNvbnRlbnQtLWlzLXBvbGFybGlnaHQgLmluc3BpcmF0aW9uLWNvbnRlbnRfX3N1YmxpbmUsXG4gIC5pbnNwaXJhdGlvbi1jb250ZW50OmhvdmVyLmluc3BpcmF0aW9uLWNvbnRlbnQtLWlzLXBvbGFybGlnaHQgLmluc3BpcmF0aW9uLWNvbnRlbnRfX3NlcGFyYXRvcixcbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQ6aG92ZXIuaW5zcGlyYXRpb24tY29udGVudC0taXMtcG9sYXJsaWdodCAuaW5zcGlyYXRpb24tY29udGVudF9fcG9sYXJsaWdodC1saW5rIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBjb2xvcjogIzRiNGI0ZDtcbiAgfVxuICAuaW5zcGlyYXRpb24tY29udGVudDpob3Zlci5pbnNwaXJhdGlvbi1jb250ZW50LS1pcy1wb2xhcmxpZ2h0IC5pbnNwaXJhdGlvbi1jb250ZW50X192YWx1ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAgIHBhZGRpbmc6IDRyZW0gNnJlbSAzcmVtIDJyZW07XG4gIH1cbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQ6aG92ZXIuaW5zcGlyYXRpb24tY29udGVudC0taXMtcG9sYXJsaWdodCAuaW5zcGlyYXRpb24tY29udGVudF9fcG9sYXJsaWdodC1pY29uIHtcbiAgICBjb2xvcjogI2ZlY2MwMDtcbiAgfVxuICAuaW5zcGlyYXRpb24tY29udGVudDpob3Zlci5pbnNwaXJhdGlvbi1jb250ZW50LS1pcy1wb2xhcmxpZ2h0IC5pbnNwaXJhdGlvbi1jb250ZW50X19wb2xhcmxpZ2h0LWxpbmsge1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICB9XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50OmhvdmVyLmluc3BpcmF0aW9uLWNvbnRlbnQtLWlzLXBvbGFybGlnaHQgLmluc3BpcmF0aW9uLWNvbnRlbnQtLXNtYWxsIC5pbnNwaXJhdGlvbi1jb250ZW50X192YWx1ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAgIHBhZGRpbmc6IDRyZW0gNHJlbSAzcmVtIDJyZW07XG4gIH1cbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQ6aG92ZXIuaW5zcGlyYXRpb24tY29udGVudC0taXMtcG9sYXJsaWdodCAuaW5zcGlyYXRpb24tY29udGVudC0tc21hbGwgLmluc3BpcmF0aW9uLWNvbnRlbnRfX3BvbGFybGlnaHQge1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICB9XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50OmhvdmVyLmluc3BpcmF0aW9uLWNvbnRlbnQtLWlzLXBvbGFybGlnaHQgLmluc3BpcmF0aW9uLWNvbnRlbnQtLXNtYWxsIC5pbnNwaXJhdGlvbi1jb250ZW50X19zdWJsaW5lIHtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogNjAlO1xuICAgICAgICBmbGV4LWJhc2lzOiA2MCU7XG4gIH1cbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQ6aG92ZXIuaW5zcGlyYXRpb24tY29udGVudC0taXMtdGV4dGJveCAuaW5zcGlyYXRpb24tY29udGVudF9fdmFsdWUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNDIsIDE4OSwgMC44KTtcbiAgfVxuICAuaW5zcGlyYXRpb24tY29udGVudDpob3Zlci5pbnNwaXJhdGlvbi1jb250ZW50LS1pcy10ZXh0Ym94IC5pbnNwaXJhdGlvbi1jb250ZW50X19zdWJsaW5lLFxuICAuaW5zcGlyYXRpb24tY29udGVudDpob3Zlci5pbnNwaXJhdGlvbi1jb250ZW50LS1pcy10ZXh0Ym94IC5pbnNwaXJhdGlvbi1jb250ZW50X19zZXBhcmF0b3IsXG4gIC5pbnNwaXJhdGlvbi1jb250ZW50OmhvdmVyLmluc3BpcmF0aW9uLWNvbnRlbnQtLWlzLXRleHRib3ggLmluc3BpcmF0aW9uLWNvbnRlbnRfX3RleHQsXG4gIC5pbnNwaXJhdGlvbi1jb250ZW50OmhvdmVyLmluc3BpcmF0aW9uLWNvbnRlbnQtLWlzLXRleHRib3ggLmluc3BpcmF0aW9uLWNvbnRlbnRfX2xpbmsge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50OmhvdmVyLmluc3BpcmF0aW9uLWNvbnRlbnQtLWlzLXRleHRib3ggLmluc3BpcmF0aW9uLWNvbnRlbnRfX3N1YmxpbmUsXG4gIC5pbnNwaXJhdGlvbi1jb250ZW50OmhvdmVyLmluc3BpcmF0aW9uLWNvbnRlbnQtLWlzLXRleHRib3ggLmluc3BpcmF0aW9uLWNvbnRlbnRfX3RleHQsXG4gIC5pbnNwaXJhdGlvbi1jb250ZW50OmhvdmVyLmluc3BpcmF0aW9uLWNvbnRlbnQtLWlzLXRleHRib3ggLmluc3BpcmF0aW9uLWNvbnRlbnRfX2xpbmsge1xuICAgIGNvbG9yOiAjNGI0YjRkO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIH1cbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQ6aG92ZXIuaW5zcGlyYXRpb24tY29udGVudC0taXMtdGV4dGJveCAuaW5zcGlyYXRpb24tY29udGVudF9fbGluayB7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLmluc3BpcmF0aW9uLWNvbnRlbnQ6aG92ZXIuaW5zcGlyYXRpb24tY29udGVudC0taXMtdGV4dGJveCAuaW5zcGlyYXRpb24tY29udGVudF9fbGluazpob3ZlciwgLmluc3BpcmF0aW9uLWNvbnRlbnQ6aG92ZXIuaW5zcGlyYXRpb24tY29udGVudC0taXMtdGV4dGJveCAuaW5zcGlyYXRpb24tY29udGVudF9fbGluazpmb2N1cywgLmluc3BpcmF0aW9uLWNvbnRlbnQ6aG92ZXIuaW5zcGlyYXRpb24tY29udGVudC0taXMtdGV4dGJveCAuaW5zcGlyYXRpb24tY29udGVudF9fbGluazphY3RpdmUge1xuICAgIGNvbG9yOiAjZmZmO1xuICB9XG4gIC5pbnNwaXJhdGlvbi1jb250ZW50OmhvdmVyLmluc3BpcmF0aW9uLWNvbnRlbnQtLWlzLXRleHRib3ggLmluc3BpcmF0aW9uLWNvbnRlbnRfX2xpbmsuYnV0dG9uLS1saW5rOmhvdmVyLCAuaW5zcGlyYXRpb24tY29udGVudDpob3Zlci5pbnNwaXJhdGlvbi1jb250ZW50LS1pcy10ZXh0Ym94IC5pbnNwaXJhdGlvbi1jb250ZW50X19saW5rLmJ1dHRvbi0tbGluazpmb2N1cywgLmluc3BpcmF0aW9uLWNvbnRlbnQ6aG92ZXIuaW5zcGlyYXRpb24tY29udGVudC0taXMtdGV4dGJveCAuaW5zcGlyYXRpb24tY29udGVudF9fbGluay5idXR0b24tLWxpbms6YWN0aXZlIHtcbiAgICBjb2xvcjogIzRiNGI0ZDtcbiAgfVxufVxuLmluc3BpcmF0aW9uLWNvbnRlbnQgLnNlby1pbWFnZV9faW1hZ2Uge1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZSB7XG4gIHBhZGRpbmc6IDAuMTMzMzMzMzMzM3JlbTtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDEwMCU7XG4gICAgICBmbGV4LWJhc2lzOiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX19jb250YWluZXIge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZSB7XG4gICAgbWF4LWhlaWdodDogMzMuMzMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX19hc3NldCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gM3MgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpO1xuICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAzcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAzcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAzcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSksIC13ZWJraXQtdHJhbnNmb3JtIDNzIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKTtcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZV9fdmFsdWUge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwYWRkaW5nOiAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VfX3ZhbHVlIHtcbiAgICBwYWRkaW5nOiAzcmVtO1xuICB9XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UgLmhlYWRsaW5lIHtcbiAgLW1zLWZsZXgtaXRlbS1hbGlnbjogZW5kO1xuICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7XG4gIGNvbG9yOiAjZmZmO1xuICBmb250LXNpemU6IDEuNDY2NjY2NjY2N3JlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZV9fcG9sYXJsaWdodCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LXBhY2s6IGVuZDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAtd2Via2l0LWJveC1mbGV4OiAyO1xuICAgICAgLW1zLWZsZXgtcG9zaXRpdmU6IDI7XG4gICAgICAgICAgZmxleC1ncm93OiAyO1xufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX19wb2xhcmxpZ2h0IC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZV9fc3VibGluZSxcbi5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZV9fcG9sYXJsaWdodCAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VfX3NlcGFyYXRvciwgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX19wb2xhcmxpZ2h0LWxpbmsge1xuICBkaXNwbGF5OiBub25lO1xuICBmb250LXdlaWdodDogNzAwO1xufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX19wb2xhcmxpZ2h0LWxpbmsge1xuICBjb2xvcjogI2ZmZjtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VfX3BvbGFybGlnaHQtaWNvbiB7XG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7XG4gIGZvbnQtc2l6ZTogNnJlbTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX190ZXh0Ym94IC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZV9fc3VibGluZSxcbi5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZV9fdGV4dGJveCAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VfX3NlcGFyYXRvcixcbi5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZV9fdGV4dGJveCAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VfX3RleHQsXG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VfX3RleHRib3ggLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX19saW5rIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZV9fdGV4dGJveCAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VfX3N1YmxpbmUsXG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VfX3RleHRib3ggLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX190ZXh0LFxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX190ZXh0Ym94IC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZV9fbGluayB7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VfX3RleHRib3ggLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX19saW5rLmJ1dHRvbi0tbGluayAuYnV0dG9uX19sYWJlbC1jb250YWluZXIge1xuICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZV9fdGV4dGJveCAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VfX3NlcGFyYXRvciB7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICM5MjkyOTI7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICM5MjkyOTI7XG4gIG1hcmdpbi1sZWZ0OiAtMC41cmVtO1xuICB3aWR0aDogNHJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX190ZXh0Ym94IC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZV9fc2VwYXJhdG9yIHtcbiAgICBtYXJnaW4tbGVmdDogLTFyZW07XG4gIH1cbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0tc21hbGwge1xuICAtd2Via2l0LWJveC1mbGV4OiAyO1xuICAgICAgLW1zLWZsZXgtcG9zaXRpdmU6IDI7XG4gICAgICAgICAgZmxleC1ncm93OiAyO1xuICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogNTAlO1xuICAgICAgZmxleC1iYXNpczogNTAlO1xufVxuQG1lZGlhIGFsbCBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKSwgKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpIHtcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1zbWFsbCB7XG4gICAgd2lkdGg6IGNhbGMoNTAlIC0gMC4yNjY2NjY2NjY3cmVtKTtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogY2FsYyg1MCUgLSAwLjI2NjY2NjY2NjdyZW0pO1xuICAgICAgICBmbGV4LWJhc2lzOiBjYWxjKDUwJSAtIDAuMjY2NjY2NjY2N3JlbSk7XG4gIH1cbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0tbWVkaXVtLCAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLW1lZGl1bS1iaWcsIC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0tYmlnIHtcbiAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDEwMCU7XG4gICAgICBmbGV4LWJhc2lzOiAxMDAlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UgLmhlYWRsaW5lIHtcbiAgICB3aWR0aDogNzUlO1xuICB9XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0tc21hbGwge1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAzMy4zMzMzMzMzMzMzJTtcbiAgICAgICAgZmxleC1iYXNpczogMzMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1zbWFsbCAuaGVhZGxpbmUge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0tbWVkaXVtIHtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogNTAlO1xuICAgICAgICBmbGV4LWJhc2lzOiA1MCU7XG4gIH1cbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1tZWRpdW0tYmlnIHtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogNjYuNjY2NjY2NjY2NyU7XG4gICAgICAgIGZsZXgtYmFzaXM6IDY2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0tYmlnIHtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMTAwJTtcbiAgICAgICAgZmxleC1iYXNpczogMTAwJTtcbiAgfVxuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLW1lZGl1bS5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0taXMtdGV4dGJveCwgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1tZWRpdW0tYmlnLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1pcy10ZXh0Ym94LCAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLWJpZy5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0taXMtdGV4dGJveCB7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1tZWRpdW0ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLWlzLXRleHRib3ggLmJ1dHRvbi0tdy1hdXRvLCAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLW1lZGl1bS1iaWcucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLWlzLXRleHRib3ggLmJ1dHRvbi0tdy1hdXRvLCAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLWJpZy5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0taXMtdGV4dGJveCAuYnV0dG9uLS13LWF1dG8ge1xuICAgIG1heC13aWR0aDogNTAlO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICB9XG59XG5AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpLCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSkgYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0tc21hbGwge1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBjYWxjKDMzLjMzMzMzMzMzMzMlIC0gMC4yNjY2NjY2NjY3cmVtKTtcbiAgICAgICAgZmxleC1iYXNpczogY2FsYygzMy4zMzMzMzMzMzMzJSAtIDAuMjY2NjY2NjY2N3JlbSk7XG4gIH1cbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1tZWRpdW0ge1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBjYWxjKDUwJSAtIDAuMjY2NjY2NjY2N3JlbSk7XG4gICAgICAgIGZsZXgtYmFzaXM6IGNhbGMoNTAlIC0gMC4yNjY2NjY2NjY3cmVtKTtcbiAgfVxuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLW1lZGl1bS1iaWcge1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBjYWxjKDY2LjY2NjY2NjY2NjclIC0gMC4yNjY2NjY2NjY3cmVtKTtcbiAgICAgICAgZmxleC1iYXNpczogY2FsYyg2Ni42NjY2NjY2NjY3JSAtIDAuMjY2NjY2NjY2N3JlbSk7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1pcy1wb2xhcmxpZ2h0IC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZV9fdmFsdWUge1xuICAgIHBhZGRpbmc6IDRyZW0gNnJlbSAzcmVtIDNyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlOmhvdmVyIC5oZWFkbGluZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2U6aG92ZXIgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX19hc3NldCB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG4gIH1cbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlOmhvdmVyLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1pcy1wb2xhcmxpZ2h0IC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZV9fc3VibGluZSxcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlOmhvdmVyLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1pcy1wb2xhcmxpZ2h0IC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZV9fc2VwYXJhdG9yLFxuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2U6aG92ZXIucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLWlzLXBvbGFybGlnaHQgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX19wb2xhcmxpZ2h0LWxpbmsge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGNvbG9yOiAjNGI0YjRkO1xuICB9XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZTpob3Zlci5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0taXMtcG9sYXJsaWdodCAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VfX3ZhbHVlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gICAgcGFkZGluZzogNHJlbSA2cmVtIDNyZW0gMnJlbTtcbiAgfVxuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2U6aG92ZXIucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLWlzLXBvbGFybGlnaHQgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX19wb2xhcmxpZ2h0LWljb24ge1xuICAgIGNvbG9yOiAjZmVjYzAwO1xuICB9XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZTpob3Zlci5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0taXMtcG9sYXJsaWdodCAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VfX3BvbGFybGlnaHQtbGluayB7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gIH1cbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlOmhvdmVyLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1pcy1wb2xhcmxpZ2h0IC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0tc21hbGwgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX192YWx1ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAgIHBhZGRpbmc6IDRyZW0gNHJlbSAzcmVtIDJyZW07XG4gIH1cbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlOmhvdmVyLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1pcy1wb2xhcmxpZ2h0IC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0tc21hbGwgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX19wb2xhcmxpZ2h0IHtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgfVxuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2U6aG92ZXIucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLWlzLXBvbGFybGlnaHQgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1zbWFsbCAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VfX3N1YmxpbmUge1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiA2MCU7XG4gICAgICAgIGZsZXgtYmFzaXM6IDYwJTtcbiAgfVxuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2U6aG92ZXIucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLWlzLXRleHRib3ggLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX192YWx1ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI0MiwgMTg5LCAwLjgpO1xuICB9XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZTpob3Zlci5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0taXMtdGV4dGJveCAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VfX3N1YmxpbmUsXG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZTpob3Zlci5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0taXMtdGV4dGJveCAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VfX3NlcGFyYXRvcixcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlOmhvdmVyLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1pcy10ZXh0Ym94IC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZV9fdGV4dCxcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlOmhvdmVyLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1pcy10ZXh0Ym94IC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZV9fbGluayB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlOmhvdmVyLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1pcy10ZXh0Ym94IC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZV9fc3VibGluZSxcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlOmhvdmVyLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1pcy10ZXh0Ym94IC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZV9fdGV4dCxcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlOmhvdmVyLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1pcy10ZXh0Ym94IC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZV9fbGluayB7XG4gICAgY29sb3I6ICM0YjRiNGQ7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgfVxuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2U6aG92ZXIucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLWlzLXRleHRib3ggLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX19saW5rIHtcbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICAgIC8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgfVxuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2U6aG92ZXIucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLWlzLXRleHRib3ggLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX19saW5rOmhvdmVyLCAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2U6aG92ZXIucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLWlzLXRleHRib3ggLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX19saW5rOmZvY3VzLCAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2U6aG92ZXIucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLWlzLXRleHRib3ggLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX19saW5rOmFjdGl2ZSB7XG4gICAgY29sb3I6ICNmZmY7XG4gIH1cbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlOmhvdmVyLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1pcy10ZXh0Ym94IC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZV9fbGluay5idXR0b24tLWxpbms6aG92ZXIsIC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZTpob3Zlci5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0taXMtdGV4dGJveCAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VfX2xpbmsuYnV0dG9uLS1saW5rOmZvY3VzLCAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2U6aG92ZXIucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLWlzLXRleHRib3ggLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX19saW5rLmJ1dHRvbi0tbGluazphY3RpdmUge1xuICAgIGNvbG9yOiAjNGI0YjRkO1xuICB9XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UgLnNlby1pbWFnZV9faW1hZ2Uge1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZSB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDA7XG4gICAgICAtbXMtZmxleC1wb3NpdGl2ZTogMDtcbiAgICAgICAgICBmbGV4LWdyb3c6IDA7XG4gIHdpZHRoOiA1MCU7XG4gIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiA1MCU7XG4gICAgICBmbGV4LWJhc2lzOiA1MCU7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpLCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2Uge1xuICAgIHdpZHRoOiBjYWxjKDUwJSAtIDAuNXJlbSk7XG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGNhbGMoNTAlIC0gMC41cmVtKTtcbiAgICAgICAgZmxleC1iYXNpczogY2FsYyg1MCUgLSAwLjVyZW0pO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZSB7XG4gICAgcGFkZGluZzogMC4yNXJlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VfX3BvbGFybGlnaHQtaWNvbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VfX2NvbmZpZ3VyYXRvci1saW5rIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI1cHgpIHtcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX19jb25maWd1cmF0b3ItbGluayB7XG4gICAgcG9pbnRlci1ldmVudHM6IGluaXRpYWw7XG4gIH1cbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZTpob3ZlciAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VfX3BvbGFybGlnaHQtaWNvbiB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2U6aG92ZXIgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX19wb2xhcmxpZ2h0LWljb24ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2U6aG92ZXIgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlX19jb25maWd1cmF0b3ItbGluayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlIC5pbWFnZS1lbGVtZW50IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlIC5pbWFnZS1lbGVtZW50IC5pbWFnZSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1jb2wtMy5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZSB7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1jb2wtMy5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0tc21hbGwge1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyAzKTtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogY2FsYygxMDAlIC8gMyk7XG4gICAgICAgIGZsZXgtYmFzaXM6IGNhbGMoMTAwJSAvIDMpO1xuICB9XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0tY29sLTMucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLW1lZGl1bSB7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDMgKiAyKTtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogY2FsYygxMDAlIC8gMyAqIDIpO1xuICAgICAgICBmbGV4LWJhc2lzOiBjYWxjKDEwMCUgLyAzICogMik7XG4gIH1cbn1cbkBtZWRpYSBhbGwgYW5kICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSksICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1jb2wtMy5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZSB7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1jb2wtMy5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0tc21hbGwge1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyAzIC0gMC41cmVtKTtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogY2FsYygxMDAlIC8gMyAtIDAuNXJlbSk7XG4gICAgICAgIGZsZXgtYmFzaXM6IGNhbGMoMTAwJSAvIDMgLSAwLjVyZW0pO1xuICB9XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0tY29sLTMucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLW1lZGl1bSB7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDMgKiAyIC0gMC41cmVtKTtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogY2FsYygxMDAlIC8gMyAqIDIgLSAwLjVyZW0pO1xuICAgICAgICBmbGV4LWJhc2lzOiBjYWxjKDEwMCUgLyAzICogMiAtIDAuNXJlbSk7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1jb2wtNC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZSB7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1jb2wtNC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0tc21hbGwge1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA0KTtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogY2FsYygxMDAlIC8gNCk7XG4gICAgICAgIGZsZXgtYmFzaXM6IGNhbGMoMTAwJSAvIDQpO1xuICB9XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0tY29sLTQucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLW1lZGl1bSB7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDQgKiAyKTtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogY2FsYygxMDAlIC8gNCAqIDIpO1xuICAgICAgICBmbGV4LWJhc2lzOiBjYWxjKDEwMCUgLyA0ICogMik7XG4gIH1cbn1cbkBtZWRpYSBhbGwgYW5kICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSksICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1jb2wtNC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZSB7XG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbiAgICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4gIH1cbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLS1jb2wtNC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0tc21hbGwge1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA0IC0gMC41cmVtKTtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogY2FsYygxMDAlIC8gNCAtIDAuNXJlbSk7XG4gICAgICAgIGZsZXgtYmFzaXM6IGNhbGMoMTAwJSAvIDQgLSAwLjVyZW0pO1xuICB9XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS0tY29sLTQucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtLW1lZGl1bSB7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDQgKiAyIC0gMC41cmVtKTtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogY2FsYygxMDAlIC8gNCAqIDIgLSAwLjVyZW0pO1xuICAgICAgICBmbGV4LWJhc2lzOiBjYWxjKDEwMCUgLyA0ICogMiAtIDAuNXJlbSk7XG4gIH1cbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLWhlcm8tdGVhc2VyIHtcbiAgbWFyZ2luOiA0cmVtIDA7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtaGVyby10ZWFzZXJfX2NvbnRhaW5lcjo6YmVmb3JlIHtcbiAgY29udGVudDogXCJcIjtcbiAgd2lkdGg6IDIwMHZ3O1xuICBoZWlnaHQ6IDEwMHZoO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMTUwZGVnLCAjNGI0YjRkLCAjMWExNzFiKTtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLWJsb2NrLW5vLWR1cGxpY2F0ZS1wcm9wZXJ0aWVzICovXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi9hc3NldHMvaW1hZ2VzL2dyYWluX3BhdHRlcm4ucG5nXCIpLCBsaW5lYXItZ3JhZGllbnQoMTUwZGVnLCAjNGI0YjRkLCAjMWExNzFiKTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAtMTtcbiAgbGVmdDogLTUwdnc7XG4gIHRvcDogMDtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg1ZGVnKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg1ZGVnKTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS1oZXJvLXRlYXNlcl9fY29udGFpbmVyOjpiZWZvcmUge1xuICAgIHRvcDogLTMwdmg7XG4gIH1cbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS1oZXJvLXRlYXNlcl9fbGluay1jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBjZW50ZXI7XG4gICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtaGVyby10ZWFzZXJfX3RleHQge1xuICAgIG1heC13aWR0aDogNjAlO1xuICB9XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtaGVyby10ZWFzZXIgLmhlYWRsaW5lIHtcbiAgZm9udC1zaXplOiAxLjJyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2UtaGVyby10ZWFzZXIgLmhlYWRsaW5lIHtcbiAgICBmb250LXNpemU6IDEuNDY2NjY2NjY2N3JlbTtcbiAgfVxufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLWhlcm8tdGVhc2VyIC5jdGEtYnV0dG9uLW51bWlub3MgLmJ1dHRvbiB7XG4gIGNvbG9yOiAjOTI5MjkyO1xuICBmb250LXNpemU6IDJyZW07XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS1oZXJvLXRlYXNlciAuY3RhLWJ1dHRvbi1udW1pbm9zIC5idXR0b24ge1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZm9udC1zaXplOiAyLjRyZW07XG4gIH1cbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS1oZXJvLXRlYXNlciAuY3RhLWJ1dHRvbi1udW1pbm9zIC5idXR0b25fX2xhYmVsLWNvbnRhaW5lciB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS1oZXJvLXRlYXNlciAuY3RhLWJ1dHRvbi1udW1pbm9zICsgLmN0YS1idXR0b24tbnVtaW5vczo6YmVmb3JlIHtcbiAgY29udGVudDogXCIvXCI7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgY29sb3I6ICNmZmY7XG4gIG1hcmdpbjogMCAwLjVyZW0gMCAxcmVtO1xuICBsaW5lLWhlaWdodDogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS11c2UtY2FzZS1oZXJvLXRlYXNlciAuY3RhLWJ1dHRvbi1udW1pbm9zICsgLmN0YS1idXR0b24tbnVtaW5vczo6YmVmb3JlIHtcbiAgICBtYXJnaW46IDAgMXJlbSAwIDEuNXJlbTtcbiAgICBmb250LXNpemU6IDIuNHJlbTtcbiAgfVxufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLXVzZS1jYXNlLWhlcm8tdGVhc2VyIC5jdGEtYnV0dG9uLW51bWlub3MuYWN0aXZlIC5idXR0b24ge1xuICBjb2xvcjogI2ZmZjtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnF1b3RlLWVsZW1lbnQgLmljb24ge1xuICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgaGVpZ2h0OiA0cmVtO1xufVxuLnF1b3RlLWVsZW1lbnQgLmljb24gc3ZnIHtcbiAgZmlsbDogI2IyYjJiMjtcbiAgd2lkdGg6IDMuMzMzMzMzMzMzM3JlbTtcbiAgaGVpZ2h0OiAzLjMzMzMzMzMzMzNyZW07XG4gIG1pbi13aWR0aDogdW5zZXQ7XG59XG4ucXVvdGUtZWxlbWVudF9fY29udGVudC1jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnF1b3RlLWVsZW1lbnRfX2NvbnRlbnQtY29udGFpbmVyIHtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gICAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAtd2Via2l0LWJveC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5xdW90ZS1lbGVtZW50X19jb250ZW50LWNvbnRhaW5lciAucXVvdGUtZWxlbWVudF9faW1hZ2UtY29udGFpbmVyIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDJyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnF1b3RlLWVsZW1lbnRfX2NvbnRlbnQtY29udGFpbmVyLS1yaWdodCB7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAgIC13ZWJraXQtYm94LWRpcmVjdGlvbjogcmV2ZXJzZTtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgfVxuICAucXVvdGUtZWxlbWVudF9fY29udGVudC1jb250YWluZXItLXJpZ2h0IC5xdW90ZS1lbGVtZW50X19pbWFnZS1jb250YWluZXIge1xuICAgIG1hcmdpbi1sZWZ0OiAycmVtO1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgfVxufVxuLnF1b3RlLWVsZW1lbnRfX2F1dGhvci1jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGVuZDtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAtd2Via2l0LWJveC1hbGlnbjogZW5kO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGVuZDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG59XG4ucXVvdGUtZWxlbWVudF9fYXV0aG9yLWNvbnRhaW5lciAuaWNvbiB7XG4gIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xufVxuLnF1b3RlLWVsZW1lbnRfX2ltYWdlLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLnF1b3RlLWVsZW1lbnRfX2ltYWdlLWNvbnRhaW5lciAuaW1hZ2VfX2ltYWdlIHtcbiAgd2lkdGg6IDEzLjkzMzMzMzMzMzNyZW07XG4gIG1pbi13aWR0aDogMTMuOTMzMzMzMzMzM3JlbTtcbn1cbi5xdW90ZS1lbGVtZW50X19pbWFnZS1jb250YWluZXItLWltYWdlLWlzLXJvdW5kIC5pbWFnZV9faW1hZ2Uge1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG59XG4ucXVvdGUtZWxlbWVudF9fcXVvdGUge1xuICBmb250LXNpemU6IDEuMnJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNzMzMzMzMzMzM3JlbTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnNlcnZpY2Utc2lkZWJhciB7XG4gIGxlZnQ6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLWhlaWdodDogMTYuNjY2NjY2NjY2N3JlbTtcbn1cbi5zZXJ2aWNlLXNpZGViYXJfX2NvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LWFsaWduOiBlbmQ7XG4gICAgICAtbXMtZmxleC1hbGlnbjogZW5kO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbn1cbi5zZXJ2aWNlLXNpZGViYXJfX2NvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAuc2VydmljZS1zaWRlYmFyX19jb250ZW50IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuLnNlcnZpY2Utc2lkZWJhci5ncmlkIHtcbiAgbWF4LXdpZHRoOiAyNi42NjY2NjY2NjY3cmVtO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uc2VydmljZS1zaWRlYmFyLWNvbnRlbnQge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMXJlbTtcbiAgd29yZC1icmVhazogYnJlYWstd29yZDtcbn1cbi5zZXJ2aWNlLXNpZGViYXItY29udGVudDpub3QoOmxhc3QtY2hpbGQpIHtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMXB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICNkMGQwZDA7XG59XG4uc2VydmljZS1zaWRlYmFyLWNvbnRlbnRfX2hlYWRlciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LXBhY2s6IHN0YXJ0O1xuICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLnNlcnZpY2Utc2lkZWJhci1jb250ZW50X19oZWFkZXItaWNvbiB7XG4gIGZvbnQtc2l6ZTogMi4yNjY2NjY2NjY3cmVtO1xuICBtYXJnaW4tcmlnaHQ6IDAuNXJlbTtcbiAgd2lkdGg6IDNyZW07XG4gIGhlaWdodDogM3JlbTtcbn1cbi5zZXJ2aWNlLXNpZGViYXItY29udGVudF9faGVhZGVyIC5oZWFkbGluZS1ncm91cCB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1heC13aWR0aDogODAlO1xufVxuLnNlcnZpY2Utc2lkZWJhci1jb250ZW50X19oZWFkZXIgLmhlYWRsaW5lLWdyb3VwIC5oZWFkbGluZSB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG4uc2VydmljZS1zaWRlYmFyLWNvbnRlbnQgLmljb24tYm94IHtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMXJlbSAwO1xufVxuLnNlcnZpY2Utc2lkZWJhci1jb250ZW50IC5pY29uLWJveF9faWNvbiB7XG4gIG1hcmdpbi1yaWdodDogMXJlbTtcbn1cbi5zZXJ2aWNlLXNpZGViYXItY29udGVudCAuaWNvbi1ib3hfX2ljb24gc3ZnIHtcbiAgd2lkdGg6IDIuMjY2NjY2NjY2N3JlbTtcbiAgaGVpZ2h0OiAyLjI2NjY2NjY2NjdyZW07XG59XG4uc2VydmljZS1zaWRlYmFyLWNvbnRlbnRfX2N0YXMge1xuICBtYXJnaW4tdG9wOiAzcmVtO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ua2Vlbi1zbGlkZXIge1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBhdXRvO1xuICAgICAtbW96LXVzZXItc2VsZWN0OiBhdXRvO1xuICAgICAgLW1zLXVzZXItc2VsZWN0OiBhdXRvO1xuICAgICAgICAgIHVzZXItc2VsZWN0OiBhdXRvO1xufVxuXG4udGVhc2VyLWJveF9fdGV4dCB1bCB7XG4gIG1hcmdpbjogMXJlbSAwO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4udGV4dC1lbGVtZW50IHVsIGxpLFxuLnRleHQtZWxlbWVudCBvbCBsaSB7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG4udGV4dC1lbGVtZW50IHVsIHtcbiAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XG59XG4udGV4dC1lbGVtZW50IG9sIHtcbiAgcGFkZGluZy1sZWZ0OiAycmVtO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4udmlkZW8ge1xuICB3aWR0aDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi52aWRlbyB2aWRlbyB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLnZpZGVvX195b3V0dWJlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZy1ib3R0b206IGNhbGMoNTAlICsgMS41cmVtKTtcbiAgcGFkZGluZy10b3A6IDEuNXJlbTtcbiAgaGVpZ2h0OiAwO1xufVxuLnZpZGVvX195b3V0dWJlIGlmcmFtZSxcbi52aWRlb19feW91dHViZSBvYmplY3QsXG4udmlkZW9fX3lvdXR1YmUgZW1iZWQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnpvb20tb3ZlcmxheSB7XG4gIHotaW5kZXg6IDEwMDA7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAwLjI1cywgb3BhY2l0eSAwLjI1cyAwcywgLXdlYmtpdC10cmFuc2Zvcm0gMC4yNXM7XG4gIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMHMgbGluZWFyIDAuMjVzLCBvcGFjaXR5IDAuMjVzIDBzLCAtd2Via2l0LXRyYW5zZm9ybSAwLjI1cztcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcyBsaW5lYXIgMC4yNXMsIG9wYWNpdHkgMC4yNXMgMHMsIHRyYW5zZm9ybSAwLjI1cztcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcyBsaW5lYXIgMC4yNXMsIG9wYWNpdHkgMC4yNXMgMHMsIHRyYW5zZm9ybSAwLjI1cywgLXdlYmtpdC10cmFuc2Zvcm0gMC4yNXM7XG59XG4uem9vbS1vdmVybGF5X19iYWNrZ3JvdW5kIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLnpvb20tb3ZlcmxheV9fY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG4uem9vbS1vdmVybGF5X19pbWFnZSB7XG4gIG1heC1oZWlnaHQ6IDYydmg7XG4gIHdpZHRoOiBhdXRvO1xufVxuLnpvb20tb3ZlcmxheV9fc2xpZGVyIHtcbiAgbWluLXdpZHRoOiA2MHZ3O1xuICBtYXgtd2lkdGg6IDYwdnc7XG4gIG1heC1oZWlnaHQ6IDYydmg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuem9vbS1vdmVybGF5X19zbGlkZXIge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIG1heC1oZWlnaHQ6IDUwdmg7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTQ5cHgpIHtcbiAgLnpvb20tb3ZlcmxheV9fc2xpZGVyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDEwMHZ3O1xuICAgIC13ZWJraXQtYm94LW9yZGluYWwtZ3JvdXA6IDE7XG4gICAgICAgIC1tcy1mbGV4LW9yZGVyOiAwO1xuICAgICAgICAgICAgb3JkZXI6IDA7XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC56b29tLW92ZXJsYXlfX3NsaWRlci0tc2luZ2xlLWltYWdlIHtcbiAgICBtYXgtaGVpZ2h0OiA4MHZoO1xuICB9XG59XG4uem9vbS1vdmVybGF5X19zbGlkZXItLXNpbmdsZS1pbWFnZSAuaW1hZ2VfX2ltYWdlIHtcbiAgd2lkdGg6IGF1dG87XG59XG4uem9vbS1vdmVybGF5X19zbGlkZXItY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICBtYXJnaW4tdG9wOiAzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuem9vbS1vdmVybGF5X19zbGlkZXItY29udGFpbmVyIHtcbiAgICAtbXMtZmxleC13cmFwOiBub3dyYXA7XG4gICAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICB9XG59XG4uem9vbS1vdmVybGF5X19zbGlkZXIgLmltYWdlLWVsZW1lbnQgLmltYWdlX19pbWFnZSB7XG4gIHdpZHRoOiBhdXRvO1xuICBtYXgtaGVpZ2h0OiA2MnZoO1xuICAtby1vYmplY3QtZml0OiBjb250YWluO1xuICAgICBvYmplY3QtZml0OiBjb250YWluO1xuICBtYXJnaW46IDAgYXV0bztcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuem9vbS1vdmVybGF5X19zbGlkZXIgLmltYWdlLWVsZW1lbnQgLmltYWdlX19pbWFnZSB7XG4gICAgbWF4LWhlaWdodDogNTB2aDtcbiAgfVxufVxuLnpvb20tb3ZlcmxheSAua2Vlbi1zbGlkZXItY2Fyb3VzZWxfX2Fycm93IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLnpvb20tb3ZlcmxheSAua2Vlbi1zbGlkZXItY2Fyb3VzZWxfX2Fycm93LS1wcmV2IHtcbiAgbGVmdDogdW5zZXQ7XG4gIG1hcmdpbi1yaWdodDogMXJlbTtcbn1cbi56b29tLW92ZXJsYXkgLmtlZW4tc2xpZGVyLWNhcm91c2VsX19hcnJvdy0tbmV4dCB7XG4gIHJpZ2h0OiB1bnNldDtcbiAgbWFyZ2luLWxlZnQ6IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU0OXB4KSB7XG4gIC56b29tLW92ZXJsYXkgLmtlZW4tc2xpZGVyLWNhcm91c2VsX19hcnJvdyB7XG4gICAgbWFyZ2luLXRvcDogMXJlbTtcbiAgfVxuICAuem9vbS1vdmVybGF5IC5rZWVuLXNsaWRlci1jYXJvdXNlbF9fYXJyb3ctLXByZXYge1xuICAgIC13ZWJraXQtYm94LW9yZGluYWwtZ3JvdXA6IDI7XG4gICAgICAgIC1tcy1mbGV4LW9yZGVyOiAxO1xuICAgICAgICAgICAgb3JkZXI6IDE7XG4gIH1cbiAgLnpvb20tb3ZlcmxheSAua2Vlbi1zbGlkZXItY2Fyb3VzZWxfX2Fycm93LS1uZXh0IHtcbiAgICAtd2Via2l0LWJveC1vcmRpbmFsLWdyb3VwOiAzO1xuICAgICAgICAtbXMtZmxleC1vcmRlcjogMjtcbiAgICAgICAgICAgIG9yZGVyOiAyO1xuICB9XG59XG4uem9vbS1vdmVybGF5X19zbGlkZSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXgtaGVpZ2h0OiA4MHZoO1xufVxuLnpvb20tb3ZlcmxheV9fY2xvc2UtYnV0dG9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMnJlbTtcbiAgdG9wOiAzcmVtO1xuICB3aWR0aDogMi40cmVtO1xuICBoZWlnaHQ6IDIuNHJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnpvb20tb3ZlcmxheV9fY2xvc2UtYnV0dG9uIHtcbiAgICByaWdodDogM3JlbTtcbiAgICB0b3A6IDNyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnpvb20tb3ZlcmxheV9fY2xvc2UtYnV0dG9uIHtcbiAgICByaWdodDogNHJlbTtcbiAgICB0b3A6IDNyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC56b29tLW92ZXJsYXlfX2Nsb3NlLWJ1dHRvbiB7XG4gICAgcmlnaHQ6IDZyZW07XG4gICAgdG9wOiA0cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDE5MjBweCkge1xuICAuem9vbS1vdmVybGF5X19jbG9zZS1idXR0b24ge1xuICAgIHJpZ2h0OiA3cmVtO1xuICAgIHRvcDogNHJlbTtcbiAgfVxufVxuLnpvb20tb3ZlcmxheV9fY2xvc2UtYnV0dG9uIHN2ZyB7XG4gIHdpZHRoOiAyLjRyZW07XG4gIGhlaWdodDogMi40cmVtO1xufVxuLnpvb20tb3ZlcmxheV9fY2xvc2UtYnV0dG9uIHN2ZyB7XG4gIGZpbGw6ICNmZmY7XG59XG4uem9vbS1vdmVybGF5X19jbG9zZS1idXR0b246aG92ZXIge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5hY2NvcmRpb24tZWxlbWVudCAuYWNjb3JkaW9uLWVsZW1lbnQtcm93IHtcbiAgYm9yZGVyLXRvcDogMC4wNjY2NjY2NjY3cmVtIHNvbGlkICNlY2VjZWM7XG59XG4uYWNjb3JkaW9uLWVsZW1lbnQgLmFjY29yZGlvbi1lbGVtZW50LXJvdzpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLWJvdHRvbTogMC4wNjY2NjY2NjY3cmVtIHNvbGlkICNlY2VjZWM7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5jYXRhbG9nLWVsZW1lbnQge1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY2F0YWxvZy1lbGVtZW50IHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuY2F0YWxvZy1lbGVtZW50X19jb250YWluZXIge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIH1cbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbnRhaW5lci1lbGVtZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzNXB4O1xuICBwYWRkaW5nOiAycmVtIDAgMC4yNXJlbTtcbn1cbi5jb250YWluZXItZWxlbWVudCBzdmcge1xuICBmaWxsOiAjNGI0YjRkO1xufVxuLmNvbnRhaW5lci1lbGVtZW50IC5rZWVuLXNsaWRlci1jYXJvdXNlbF9fZG90Om5vdCguYWN0aXZlKSB7XG4gIGJvcmRlci13aWR0aDogMC40NjY2NjY2NjY3cmVtO1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICNkMGQwZDA7XG4gIGJhY2tncm91bmQ6ICNkMGQwZDA7XG59XG4uY29udGFpbmVyLWVsZW1lbnQgLmltYWdlLXNsaWRlciAuaWNvbi1idXR0b25fX2ljb24tLWJnLWNvbnRyb2xzLW92ZXJsYXksIC5jb250YWluZXItZWxlbWVudCAuaW1hZ2Utc2xpZGVyIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctY29udHJvbHMtb3ZlcmxheSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTtcbn1cbi5jb250YWluZXItZWxlbWVudC0tc2x2dGVjIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAxYTNlYztcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4uY29udGFpbmVyLWVsZW1lbnQtLXNsdnRlYyAuYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRiNGI0ZDtcbiAgY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogIzRiNGI0ZDtcbn1cbi5jb250YWluZXItZWxlbWVudC0tc2x2dGVjIC5idXR0b24gLmljb24gPiBzdmcge1xuICBmaWxsOiAjZmZmO1xufVxuLmNvbnRhaW5lci1lbGVtZW50LS1zbHZ0ZWMgLmJ1dHRvbi0tbm8tcGFkZGluZyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMWEzZWM7XG4gIGNvbG9yOiAjZmZmO1xufVxuLmNvbnRhaW5lci1lbGVtZW50LS1zbHZ0ZWMgLmhlYWRsaW5lLWdyb3VwIC5oZWFkbGluZSB7XG4gIGNvbG9yOiAjNGI0YjRkO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29udGVudC1zbGlkZXIge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZy1yaWdodDogMDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmNvbnRlbnQtc2xpZGVyIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuY29udGVudC1zbGlkZXIge1xuICAgIHBhZGRpbmctbGVmdDogOC4zMzMzMzMzMzMzJTtcbiAgfVxufVxuLmNvbnRlbnQtc2xpZGVyID4gLmhlYWRsaW5lLWdyb3VwIHtcbiAgbWFyZ2luLWxlZnQ6IC0xcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmNvbnRlbnQtc2xpZGVyID4gLmhlYWRsaW5lLWdyb3VwIHtcbiAgICBtYXJnaW4tbGVmdDogLTguMzMzMzMzMzMzMyU7XG4gIH1cbn1cbi5jb250ZW50LXNsaWRlcl9faGVyby1jb250YWluZXIge1xuICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gIHBhZGRpbmctcmlnaHQ6IDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuY29udGVudC1zbGlkZXJfX2hlcm8tY29udGFpbmVyIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5mb3JtLWVsZW1lbnQge1xuICBtaW4taGVpZ2h0OiAxNi42NjY2NjY2NjY3cmVtO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4uZm9ybS1lbGVtZW50IC5sb2FkaW5nLWluZGljYXRvciB7XG4gIHotaW5kZXg6IDMwMDtcbn1cbi5mb3JtLWVsZW1lbnQtLWVycm9yIHtcbiAgbWluLWhlaWdodDogYXV0bztcbiAgaGVpZ2h0OiAwO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uZ2FsbGVyeS1lbGVtZW50IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG4uZ2FsbGVyeS1lbGVtZW50X19jb250YWluZXIge1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1ibG9jay1uby1yZWR1bmRhbnQtbG9uZ2hhbmQtcHJvcGVydGllcyAqL1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg4LCBjYWxjKDEyLjUlIC0gMC40NXJlbSkpO1xuICBncmlkLXRlbXBsYXRlLXJvd3M6IHJlcGVhdCg4LCBjYWxjKDEyLjUlIC0gMC40NXJlbSkpO1xuICBncmlkLXRlbXBsYXRlLWFyZWFzOiBcImJveC0xIGJveC0xIGJveC0xIGJveC0xIGJveC0yIGJveC0yIGJveC0yIGJveC0yXCIgXCJib3gtMSBib3gtMSBib3gtMSBib3gtMSBib3gtMiBib3gtMiBib3gtMiBib3gtMlwiIFwiYm94LTEgYm94LTEgYm94LTEgYm94LTEgYm94LTIgYm94LTIgYm94LTIgYm94LTJcIiBcImJveC01IGJveC01IGJveC01IGJveC01IGJveC0yIGJveC0yIGJveC0yIGJveC0yXCIgXCJib3gtNSBib3gtNSBib3gtNSBib3gtNSBib3gtNiBib3gtNiBib3gtNyBib3gtN1wiIFwiYm94LTUgYm94LTUgYm94LTUgYm94LTUgYm94LTYgYm94LTYgYm94LTcgYm94LTdcIiBcImJveC04IGJveC04IGJveC04IGJveC04IGJveC02IGJveC02IGJveC03IGJveC03XCIgXCJib3gtOCBib3gtOCBib3gtOCBib3gtOCBib3gtOSBib3gtOSBib3gtOSBib3gtOVwiIFwiYm94LTggYm94LTggYm94LTggYm94LTggYm94LTkgYm94LTkgYm94LTkgYm94LTlcIjtcbiAgZ3JpZC1nYXA6IDAuNXJlbTtcbiAgd2lkdGg6IDEwMCU7XG4gIC8qIHN0eWxlbGludC1lbmFibGUgZGVjbGFyYXRpb24tYmxvY2stbm8tcmVkdW5kYW50LWxvbmdoYW5kLXByb3BlcnRpZXMgKi9cbn1cbi5nYWxsZXJ5LWVsZW1lbnRfX2NvbnRhaW5lci5leHBhbmQge1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg4LCBjYWxjKDEyLjUlIC0gMC40NXJlbSkpO1xuICBncmlkLXRlbXBsYXRlLXJvd3M6IHJlcGVhdCgxNiwgY2FsYyg2LjI1JSAtIDAuNDVyZW0pKTtcbiAgZ3JpZC10ZW1wbGF0ZS1hcmVhczogXCJib3gtMSBib3gtMSBib3gtMSBib3gtMSBib3gtMiBib3gtMiBib3gtMiBib3gtMlwiIFwiYm94LTEgYm94LTEgYm94LTEgYm94LTEgYm94LTIgYm94LTIgYm94LTIgYm94LTJcIiBcImJveC0xIGJveC0xIGJveC0xIGJveC0xIGJveC0yIGJveC0yIGJveC0yIGJveC0yXCIgXCJib3gtNSBib3gtNSBib3gtNSBib3gtNSBib3gtMiBib3gtMiBib3gtMiBib3gtMlwiIFwiYm94LTUgYm94LTUgYm94LTUgYm94LTUgYm94LTYgYm94LTYgYm94LTcgYm94LTdcIiBcImJveC01IGJveC01IGJveC01IGJveC01IGJveC02IGJveC02IGJveC03IGJveC03XCIgXCJib3gtOCBib3gtOCBib3gtOCBib3gtOCBib3gtNiBib3gtNiBib3gtNyBib3gtN1wiIFwiYm94LTggYm94LTggYm94LTggYm94LTggYm94LTkgYm94LTkgYm94LTkgYm94LTlcIiBcImJveC04IGJveC04IGJveC04IGJveC04IGJveC05IGJveC05IGJveC05IGJveC05XCIgXCJib3gtMyBib3gtMyBib3gtMyBib3gtMyBib3gtMyBib3gtMyBib3gtNCBib3gtNFwiIFwiYm94LTMgYm94LTMgYm94LTMgYm94LTMgYm94LTMgYm94LTMgYm94LTQgYm94LTRcIiBcImJveC0zIGJveC0zIGJveC0zIGJveC0zIGJveC0zIGJveC0zIGJveC00IGJveC00XCIgXCJib3gtMyBib3gtMyBib3gtMyBib3gtMyBib3gtMyBib3gtMyBib3gtNCBib3gtNFwiIFwiYm94LTEwIGJveC0xMCBib3gtMTAgYm94LTEwIGJveC0xMSBib3gtMTEgYm94LTExIGJveC0xMVwiIFwiYm94LTEwIGJveC0xMCBib3gtMTAgYm94LTEwIGJveC0xMSBib3gtMTEgYm94LTExIGJveC0xMVwiIFwiYm94LTEwIGJveC0xMCBib3gtMTAgYm94LTEwIGJveC0xMSBib3gtMTEgYm94LTExIGJveC0xMVwiIFwiYm94LTEwIGJveC0xMCBib3gtMTAgYm94LTEwIGJveC0xMSBib3gtMTEgYm94LTExIGJveC0xMVwiO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZ2FsbGVyeS1lbGVtZW50X19jb250YWluZXIuZXhwYW5kIHtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgxNiwgMWZyKTtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IHJlcGVhdCg4LCAxZnIpO1xuICAgIGdyaWQtdGVtcGxhdGUtYXJlYXM6IFwiYm94LTEgYm94LTEgYm94LTEgYm94LTEgYm94LTIgYm94LTIgYm94LTIgYm94LTMgYm94LTMgYm94LTMgYm94LTMgYm94LTMgYm94LTMgYm94LTMgYm94LTQgYm94LTRcIiBcImJveC0xIGJveC0xIGJveC0xIGJveC0xIGJveC0yIGJveC0yIGJveC0yIGJveC0zIGJveC0zIGJveC0zIGJveC0zIGJveC0zIGJveC0zIGJveC0zIGJveC00IGJveC00XCIgXCJib3gtMSBib3gtMSBib3gtMSBib3gtMSBib3gtMiBib3gtMiBib3gtMiBib3gtMyBib3gtMyBib3gtMyBib3gtMyBib3gtMyBib3gtMyBib3gtMyBib3gtNCBib3gtNFwiIFwiYm94LTUgYm94LTUgYm94LTUgYm94LTUgYm94LTIgYm94LTIgYm94LTIgYm94LTMgYm94LTMgYm94LTMgYm94LTMgYm94LTMgYm94LTMgYm94LTMgYm94LTQgYm94LTRcIiBcImJveC01IGJveC01IGJveC01IGJveC01IGJveC02IGJveC02IGJveC03IGJveC03IGJveC0xMCBib3gtMTAgYm94LTEwIGJveC0xMCBib3gtMTEgYm94LTExIGJveC0xMSBib3gtMTFcIiBcImJveC04IGJveC04IGJveC04IGJveC04IGJveC02IGJveC02IGJveC03IGJveC03IGJveC0xMCBib3gtMTAgYm94LTEwIGJveC0xMCBib3gtMTEgYm94LTExIGJveC0xMSBib3gtMTFcIiBcImJveC04IGJveC04IGJveC04IGJveC04IGJveC05IGJveC05IGJveC05IGJveC05IGJveC0xMCBib3gtMTAgYm94LTEwIGJveC0xMCBib3gtMTEgYm94LTExIGJveC0xMSBib3gtMTFcIiBcImJveC04IGJveC04IGJveC04IGJveC04IGJveC05IGJveC05IGJveC05IGJveC05IGJveC0xMCBib3gtMTAgYm94LTEwIGJveC0xMCBib3gtMTEgYm94LTExIGJveC0xMSBib3gtMTFcIjtcbiAgfVxufVxuLmdhbGxlcnktZWxlbWVudF9fY29udGFpbmVyLmV4cGFuZCAuZ2FsbGVyeS1lbGVtZW50X19ib3gge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5nYWxsZXJ5LWVsZW1lbnRfX2NvbnRhaW5lciB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMTYsIDFmcik7XG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiByZXBlYXQoOCwgMWZyKTtcbiAgICBncmlkLXRlbXBsYXRlLWFyZWFzOiBcImJveC0xIGJveC0xIGJveC0xIGJveC0xIGJveC0yIGJveC0yIGJveC0yIGJveC0zIGJveC0zIGJveC0zIGJveC0zIGJveC0zIGJveC0zIGJveC0zIGJveC00IGJveC00XCIgXCJib3gtMSBib3gtMSBib3gtMSBib3gtMSBib3gtMiBib3gtMiBib3gtMiBib3gtMyBib3gtMyBib3gtMyBib3gtMyBib3gtMyBib3gtMyBib3gtMyBib3gtNCBib3gtNFwiIFwiYm94LTEgYm94LTEgYm94LTEgYm94LTEgYm94LTIgYm94LTIgYm94LTIgYm94LTMgYm94LTMgYm94LTMgYm94LTMgYm94LTMgYm94LTMgYm94LTMgYm94LTQgYm94LTRcIiBcImJveC01IGJveC01IGJveC01IGJveC01IGJveC0yIGJveC0yIGJveC0yIGJveC0zIGJveC0zIGJveC0zIGJveC0zIGJveC0zIGJveC0zIGJveC0zIGJveC00IGJveC00XCIgXCJib3gtNSBib3gtNSBib3gtNSBib3gtNSBib3gtNiBib3gtNiBib3gtNyBib3gtNyBib3gtMTAgYm94LTEwIGJveC0xMCBib3gtMTAgYm94LTExIGJveC0xMSBib3gtMTEgYm94LTExXCIgXCJib3gtOCBib3gtOCBib3gtOCBib3gtOCBib3gtNiBib3gtNiBib3gtNyBib3gtNyBib3gtMTAgYm94LTEwIGJveC0xMCBib3gtMTAgYm94LTExIGJveC0xMSBib3gtMTEgYm94LTExXCIgXCJib3gtOCBib3gtOCBib3gtOCBib3gtOCBib3gtOSBib3gtOSBib3gtOSBib3gtOSBib3gtMTAgYm94LTEwIGJveC0xMCBib3gtMTAgYm94LTExIGJveC0xMSBib3gtMTEgYm94LTExXCIgXCJib3gtOCBib3gtOCBib3gtOCBib3gtOCBib3gtOSBib3gtOSBib3gtOSBib3gtOSBib3gtMTAgYm94LTEwIGJveC0xMCBib3gtMTAgYm94LTExIGJveC0xMSBib3gtMTEgYm94LTExXCI7XG4gIH1cbn1cbi5nYWxsZXJ5LWVsZW1lbnRfX2NvbnRhaW5lciAuaW1hZ2UtZWxlbWVudCAuaW1hZ2Uge1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbi5nYWxsZXJ5LWVsZW1lbnRfX2NvbnRhaW5lciAuaW1hZ2UtZWxlbWVudCAuaW1hZ2VfX2ltYWdlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtby1vYmplY3QtZml0OiBjb3ZlcjtcbiAgICAgb2JqZWN0LWZpdDogY292ZXI7XG59XG4uZ2FsbGVyeS1lbGVtZW50IC5pbWFnZS1lbGVtZW50IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG59XG4uZ2FsbGVyeS1lbGVtZW50IC5pbWFnZS1lbGVtZW50IC5pbWFnZSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5nYWxsZXJ5LWVsZW1lbnQgLmltYWdlLWVsZW1lbnQgLmltYWdlX19pbWFnZSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW8tb2JqZWN0LWZpdDogY292ZXI7XG4gICAgIG9iamVjdC1maXQ6IGNvdmVyO1xufVxuLmdhbGxlcnktZWxlbWVudF9fYm94LTEge1xuICBncmlkLWFyZWE6IGJveC0xO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uZ2FsbGVyeS1lbGVtZW50X19ib3gtMiB7XG4gIGdyaWQtYXJlYTogYm94LTI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5nYWxsZXJ5LWVsZW1lbnRfX2JveC0zIHtcbiAgZ3JpZC1hcmVhOiBib3gtMztcbiAgY3Vyc29yOiBwb2ludGVyO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5nYWxsZXJ5LWVsZW1lbnRfX2JveC0zLmltYWdlLWVsZW1lbnQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi5nYWxsZXJ5LWVsZW1lbnRfX2JveC00IHtcbiAgZ3JpZC1hcmVhOiBib3gtNDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5nYWxsZXJ5LWVsZW1lbnRfX2JveC00LmltYWdlLWVsZW1lbnQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbi5nYWxsZXJ5LWVsZW1lbnRfX2JveC01IHtcbiAgZ3JpZC1hcmVhOiBib3gtNTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmdhbGxlcnktZWxlbWVudF9fYm94LTYge1xuICBncmlkLWFyZWE6IGJveC02O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uZ2FsbGVyeS1lbGVtZW50X19ib3gtNyB7XG4gIGdyaWQtYXJlYTogYm94LTc7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5nYWxsZXJ5LWVsZW1lbnRfX2JveC04IHtcbiAgZ3JpZC1hcmVhOiBib3gtODtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmdhbGxlcnktZWxlbWVudF9fYm94LTkge1xuICBncmlkLWFyZWE6IGJveC05O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uZ2FsbGVyeS1lbGVtZW50X19ib3gtMTAge1xuICBncmlkLWFyZWE6IGJveC0xMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5nYWxsZXJ5LWVsZW1lbnRfX2JveC0xMC5pbWFnZS1lbGVtZW50IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4uZ2FsbGVyeS1lbGVtZW50X19ib3gtMTEge1xuICBncmlkLWFyZWE6IGJveC0xMTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuICAvKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5nYWxsZXJ5LWVsZW1lbnRfX2JveC0xMS5pbWFnZS1lbGVtZW50IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4uZ2FsbGVyeS1lbGVtZW50X19vdmVybGF5IHtcbiAgei1pbmRleDogMTAwMDtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xuICAtd2Via2l0LXRyYW5zaXRpb246IHZpc2liaWxpdHkgMHMgbGluZWFyIDAuMjVzLCBvcGFjaXR5IDAuMjVzIDBzLCAtd2Via2l0LXRyYW5zZm9ybSAwLjI1cztcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcyBsaW5lYXIgMC4yNXMsIG9wYWNpdHkgMC4yNXMgMHMsIC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAwLjI1cywgb3BhY2l0eSAwLjI1cyAwcywgdHJhbnNmb3JtIDAuMjVzO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAwLjI1cywgb3BhY2l0eSAwLjI1cyAwcywgdHJhbnNmb3JtIDAuMjVzLCAtd2Via2l0LXRyYW5zZm9ybSAwLjI1cztcbn1cbi5nYWxsZXJ5LWVsZW1lbnRfX292ZXJsYXktYmFja2dyb3VuZCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5nYWxsZXJ5LWVsZW1lbnRfX292ZXJsYXktY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG4uZ2FsbGVyeS1lbGVtZW50X19vdmVybGF5IC5pbWFnZS1lbGVtZW50IC5pbWFnZSB7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuLmdhbGxlcnktZWxlbWVudF9fb3ZlcmxheSAuaW1hZ2UtZWxlbWVudCAuaW1hZ2VfX2ltYWdlIHtcbiAgLW8tb2JqZWN0LWZpdDogY29udGFpbjtcbiAgICAgb2JqZWN0LWZpdDogY29udGFpbjtcbn1cbi5nYWxsZXJ5LWVsZW1lbnRfX3NsaWRlciB7XG4gIG1heC13aWR0aDogNjB2dztcbiAgbWF4LWhlaWdodDogODB2aDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5nYWxsZXJ5LWVsZW1lbnRfX3NsaWRlciB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgbWF4LWhlaWdodDogNTB2aDtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1NDlweCkge1xuICAuZ2FsbGVyeS1lbGVtZW50X19zbGlkZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogMTAwdnc7XG4gICAgLXdlYmtpdC1ib3gtb3JkaW5hbC1ncm91cDogMTtcbiAgICAgICAgLW1zLWZsZXgtb3JkZXI6IDA7XG4gICAgICAgICAgICBvcmRlcjogMDtcbiAgfVxufVxuLmdhbGxlcnktZWxlbWVudF9fc2xpZGVyLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLW1zLWZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmdhbGxlcnktZWxlbWVudF9fc2xpZGVyLWNvbnRhaW5lciB7XG4gICAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgfVxufVxuLmdhbGxlcnktZWxlbWVudF9fc2xpZGVyIC5pbWFnZS1lbGVtZW50IC5pbWFnZV9faW1hZ2Uge1xuICB3aWR0aDogYXV0bztcbiAgbWF4LWhlaWdodDogODB2aDtcbiAgLW8tb2JqZWN0LWZpdDogY29udGFpbjtcbiAgICAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLmdhbGxlcnktZWxlbWVudF9fc2xpZGVyIC5pbWFnZS1lbGVtZW50IC5pbWFnZV9faW1hZ2Uge1xuICAgIG1heC1oZWlnaHQ6IDUwdmg7XG4gIH1cbn1cbi5nYWxsZXJ5LWVsZW1lbnQgLmtlZW4tc2xpZGVyLWNhcm91c2VsX19hcnJvdyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5nYWxsZXJ5LWVsZW1lbnQgLmtlZW4tc2xpZGVyLWNhcm91c2VsX19hcnJvdy0tcHJldiB7XG4gIGxlZnQ6IHVuc2V0O1xuICBtYXJnaW4tcmlnaHQ6IDFyZW07XG59XG4uZ2FsbGVyeS1lbGVtZW50IC5rZWVuLXNsaWRlci1jYXJvdXNlbF9fYXJyb3ctLW5leHQge1xuICByaWdodDogdW5zZXQ7XG4gIG1hcmdpbi1sZWZ0OiAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1NDlweCkge1xuICAuZ2FsbGVyeS1lbGVtZW50IC5rZWVuLXNsaWRlci1jYXJvdXNlbF9fYXJyb3cge1xuICAgIG1hcmdpbi10b3A6IDFyZW07XG4gIH1cbiAgLmdhbGxlcnktZWxlbWVudCAua2Vlbi1zbGlkZXItY2Fyb3VzZWxfX2Fycm93LS1wcmV2IHtcbiAgICAtd2Via2l0LWJveC1vcmRpbmFsLWdyb3VwOiAyO1xuICAgICAgICAtbXMtZmxleC1vcmRlcjogMTtcbiAgICAgICAgICAgIG9yZGVyOiAxO1xuICB9XG4gIC5nYWxsZXJ5LWVsZW1lbnQgLmtlZW4tc2xpZGVyLWNhcm91c2VsX19hcnJvdy0tbmV4dCB7XG4gICAgLXdlYmtpdC1ib3gtb3JkaW5hbC1ncm91cDogMztcbiAgICAgICAgLW1zLWZsZXgtb3JkZXI6IDI7XG4gICAgICAgICAgICBvcmRlcjogMjtcbiAgfVxufVxuLmdhbGxlcnktZWxlbWVudF9fY2xvc2UtYnV0dG9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMnJlbTtcbiAgdG9wOiAzcmVtO1xuICB3aWR0aDogMi40cmVtO1xuICBoZWlnaHQ6IDIuNHJlbTtcbiAgei1pbmRleDogMTAwMTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLmdhbGxlcnktZWxlbWVudF9fY2xvc2UtYnV0dG9uIHtcbiAgICByaWdodDogM3JlbTtcbiAgICB0b3A6IDNyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmdhbGxlcnktZWxlbWVudF9fY2xvc2UtYnV0dG9uIHtcbiAgICByaWdodDogNHJlbTtcbiAgICB0b3A6IDNyZW07XG4gIH1cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5nYWxsZXJ5LWVsZW1lbnRfX2Nsb3NlLWJ1dHRvbiB7XG4gICAgcmlnaHQ6IDZyZW07XG4gICAgdG9wOiA0cmVtO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDE5MjBweCkge1xuICAuZ2FsbGVyeS1lbGVtZW50X19jbG9zZS1idXR0b24ge1xuICAgIHJpZ2h0OiA3cmVtO1xuICAgIHRvcDogNHJlbTtcbiAgfVxufVxuLmdhbGxlcnktZWxlbWVudF9fY2xvc2UtYnV0dG9uIHN2ZyB7XG4gIHdpZHRoOiAyLjRyZW07XG4gIGhlaWdodDogMi40cmVtO1xufVxuLmdhbGxlcnktZWxlbWVudF9fY2xvc2UtYnV0dG9uIHN2ZyB7XG4gIGZpbGw6ICNmZmY7XG59XG4uZ2FsbGVyeS1lbGVtZW50X19zaG93LW1vcmUtY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XG4gICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uaWNvbi10ZWFzZXIge1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuaWNvbi10ZWFzZXIge1xuICAgIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gIH1cbn1cbi5pY29uLXRlYXNlcl9fY29udGFpbmVyIHtcbiAgbWFyZ2luOiAwIC0wLjVyZW07XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5pbWFnZS1pY29uLXRlYXNlciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuLmltYWdlLWljb24tdGVhc2VyX19oZWFkbGluZXMge1xuICBtYXJnaW46IDA7XG59XG4uaW1hZ2UtaWNvbi10ZWFzZXJfX2ljb24tY29udGFpbmVyIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogMTE5OXB4KSB7XG4gIC5pbWFnZS1pY29uLXRlYXNlcl9faWNvbi1jb250YWluZXIge1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpvbnRhbDtcbiAgICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgfVxuICAuaW1hZ2UtaWNvbi10ZWFzZXJfX2ljb24tY29udGFpbmVyIC5pY29uLWJveCB7XG4gICAgd2lkdGg6IDUwJTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLmltYWdlLWljb24tdGVhc2VyIHtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gICAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcbiAgICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIH1cbiAgLmltYWdlLWljb24tdGVhc2VyIC5pbWFnZSB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG4gIC5pbWFnZS1pY29uLXRlYXNlciAuaW1hZ2VfX2ltYWdlIHtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxufVxuLmltYWdlLWljb24tdGVhc2VyX19jb250ZW50IHtcbiAgcGFkZGluZzogMS41cmVtIDFyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAuaW1hZ2UtaWNvbi10ZWFzZXJfX2NvbnRlbnQge1xuICAgIHBhZGRpbmctbGVmdDogMTAlO1xuICAgIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gIH1cbn1cbi5pbWFnZS1pY29uLXRlYXNlciAuaWNvbi1ib3gge1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgbWFyZ2luOiAxLjZyZW0gMCAxcmVtO1xuICBwYWRkaW5nOiAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDExOTlweCkge1xuICAuaW1hZ2UtaWNvbi10ZWFzZXIgLmljb24tYm94Om50aC1jaGlsZChvZGQpIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xuICB9XG4gIC5pbWFnZS1pY29uLXRlYXNlciAuaWNvbi1ib3g6bnRoLWNoaWxkKGV2ZW4pIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gIH1cbn1cbi5pbWFnZS1pY29uLXRlYXNlciAuaWNvbi1ib3hfX2ljb24ge1xuICAtbXMtZmxleC1pdGVtLWFsaWduOiBzdGFydDtcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG4gIGZvbnQtc2l6ZTogNHJlbTtcbiAgbWFyZ2luLXJpZ2h0OiA0cmVtO1xuICB3aWR0aDogNHJlbTtcbiAgaGVpZ2h0OiA0cmVtO1xuICBsaW5lLWhlaWdodDogNHJlbTtcbn1cbi5pbWFnZS1pY29uLXRlYXNlci0tbGVmdCB7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogcmV2ZXJzZTtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLmltYWdlLWljb24tdGVhc2VyLS1sZWZ0IHtcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gICAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiByZXZlcnNlO1xuICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICB9XG4gIC5pbWFnZS1pY29uLXRlYXNlci0tbGVmdCAuaW1hZ2UtaWNvbi10ZWFzZXJfX2NvbnRlbnQge1xuICAgIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxMCU7XG4gIH1cbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmltYWdlLW1hcCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLXRvcDogNS43MzMzMzMzMzMzcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuaW1hZ2UtbWFwIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG4uaW1hZ2UtbWFwX19iYWNrZ3JvdW5kLWltYWdlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMTAwJTtcbiAgei1pbmRleDogLTE7XG59XG4uaW1hZ2UtbWFwX19jb250YWluZXIge1xuICBoZWlnaHQ6IDEwMCU7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5pbWFnZS1zbGlkZXJfX2NvbnRhaW5lci0td2l0aC16b29tIC5pbWFnZV9faW1hZ2Uge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uaW1hZ2Utc2xpZGVyIC5pbWFnZS1lbGVtZW50IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG59XG4uaW1hZ2Utc2xpZGVyIC5pbWFnZS1lbGVtZW50IC5pbWFnZV9faW1hZ2Uge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1vLW9iamVjdC1maXQ6IGNvdmVyO1xuICAgICBvYmplY3QtZml0OiBjb3Zlcjtcbn1cbi5pbWFnZS1zbGlkZXIgLmljb24tYnV0dG9uX19pY29uLS1iZy1jb250cm9scy1vdmVybGF5LCAuaW1hZ2Utc2xpZGVyIC5pY29uLWJ1dHRvbl9faG92ZXItaWNvbi0tYmctY29udHJvbHMtb3ZlcmxheSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2VjZWM7XG59XG4uaW1hZ2Utc2xpZGVyX19vdmVybGF5IC5pbWFnZSB7XG4gIHBhZGRpbmc6IDAgMCAxLjVyZW07XG59XG4uaW1hZ2Utc2xpZGVyX19vdmVybGF5IC5pbWFnZV9faW1hZ2Uge1xuICAtd2Via2l0LWJveC1zaGFkb3c6ICMxYTE3MWIgMTBweCAxMHB4IDEwcHggMDtcbiAgICAgICAgICBib3gtc2hhZG93OiAjMWExNzFiIDEwcHggMTBweCAxMHB4IDA7XG59XG4uaW1hZ2Utc2xpZGVyX19vdmVybGF5IC56b29tLW92ZXJsYXlfX2Nsb3NlLWJ1dHRvbiBzdmcge1xuICBmaWxsOiAjZmZmO1xufVxuLmltYWdlLXNsaWRlcl9fb3ZlcmxheSAuaWNvbi1idXR0b25fX2ljb24tLWJnLWNvbnRyb2xzLW92ZXJsYXksIC5pbWFnZS1zbGlkZXJfX292ZXJsYXkgLmljb24tYnV0dG9uX19ob3Zlci1pY29uLS1iZy1jb250cm9scy1vdmVybGF5IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4uaW1hZ2UtdGV4dC10ZWFzZXItZ3JpZCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuLmltYWdlLXRleHQtdGVhc2VyLWdyaWRfX2NvbnRhaW5lci0td2l0aC16b29tIC5pbWFnZV9faW1hZ2Uge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5wcm9kdWN0LWNhdGVnb3J5LXRlYXNlcl9faGVhZGxpbmUge1xuICBtYXJnaW4tYm90dG9tOiAxLjZyZW07XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAucHJvZHVjdC1jYXRlZ29yeS10ZWFzZXJfX2hlYWRsaW5lIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWFyZ2luLWJvdHRvbTogMi43MzMzMzMzMzMzcmVtO1xuICB9XG59IiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogcHJpbWFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhbHRlcm5hdGl2ZSBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHNlY29uZGFyeSBlbGVtZW50cycgYmFja2dyb3VuZCBhbmQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB3aGl0ZSBjb2xvci4gVXNhZ2U6IG5vdCB0cmFuc3BhcmVudCBlbGVtZW50cycgYmFja2dyb3VuZCBvZiBkZWZhdWx0IGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGxpZ2h0ZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBsaWdodGVzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIHNoYWRlIG9mIHRoZSBibGFjayBjb2xvci4gVXNhZ2U6IGFzIGEgYmFzZSBvZiBibGFjayBjb2xvciBmb3Igc2VtaS10cmFuc3BhcmVudCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFyayBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmtlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgZGFya2VzdCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyB0ZXh0IGNvbG9yIHZhcmlhbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHRyYW5zcGFyZW50IGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGJhY2tncm91bmQgY29sb3IuIFVzYWdlOiBib2R5IGFuZCBzaWRlLWRyYXdlciBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGV4dC4gVXNhZ2U6IGRlZmF1bHQgZ2xvYmFsIHRleHQgY29sb3IuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cyBvbiBmb2N1cyBldmVudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgc2hhZG93IHNoYWRlIGFuZCB0cmFuc3BhcmVuY3kgZm9yIHRoZSBzaGFkb3dlZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBvdmVybGF5IGNvbG9yLiBVc2FnZTogZWxlbWVudHMgd2l0aCBvdmVybGF5IC0gc2lkZS1kcmF3ZXIsIHBvcHVwcyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgaW1hZ2Ugb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGltYWdlcyB3aXRoIG92ZXJsYXkgLSBsYXp5LWltYWdlLlxuICovXG4vKipcbiAqIERlZmluZXMgYWN0aW9uIGNvbG9ycyBtYXAuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nLiBVc2FnZTogYm9keSBnbG9iYWwgZm9udCBzdHlsZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBmb250IGZhbWlseSBzZXR0aW5nIGZvciBjb2RlLiBDYW4gYmUgdXNlZCBmb3IgY29kZSBhbmQgcHJlIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYmFzaWMgZm9udCBzaXplLiBVc2FnZTogZ2xvYmFsIGJhc2ljIGZvbnQgc2l6ZS5cbiAqL1xuLyoqXG4gKiBGb250IHNpemUgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRm9udCB3ZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGluIHRvIHNldCBmb250IHdlaWdodCBwcm9wZXJ0eS5cbiAqL1xuLyoqXG4gKiBGb250IGxpbmUgaGVpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGR1cmF0aW9uIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGRlZmF1bHQgei1pbmRleCB2YWx1ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBmbG9hdGluZyBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBub3RpZmljYXRpb24gYXJlYSBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgaGVhZGVyIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2VhcmNoIHN1Z2dlc3Rpb25zIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgYWpheCBsb2FkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgdG9wIG5hdmlnYXRpb24gY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHNwYWNpbmcgdmFsdWVzIG1hcC4gVXNhZ2U6IHNwYWNpbmcgaGVscGVycyBhbmQgbWl4aW5zLlxuICovXG4vKipcbiAqIERlZmluZXMgYnJlYWtwb2ludHMnIHZhbHVlcyBmb3IgcmVzcG9uc2l2ZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgc3lzdGVtIGNvbHVtbnMgY291bnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIGNvbnRhaW5lciBtYXggd2lkdGguXG4gKi9cbi8qKlxuICogRGVmaW5lcyBndXR0ZXJzJyBzaXplIGZvciBncmlkIFwid2l0aC1ndXR0ZXJcIiBtb2RpZmllci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGltcG9ydCBibGFja2xpc3QuIFVzYWdlOiBpbXBvcnQgaGVscGVyLlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGxpc3Qgb2YgcHJvcGVyaWVzIGZvciByZXNldCB1c2FnZS5cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgZGFya2VuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGxpZ2h0ZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtc2l6ZSBwcm9wZXJ0eSBmcm9tIGZvbnQgc2l6ZSBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXNpemUgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkc2l6ZVxuICovXG4vKipcbiAqIFNldHMgZm9udC13ZWlnaHQgcHJvcGVydHkgZnJvbSBmb250IHdlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LXdlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmd9ICR3ZWlnaHRcbiAqL1xuLyoqXG4gKiBTZXRzIGxpbmUtaGVpZ2h0IHByb3BlcnR5IGZyb20gbGluZS1oZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1saW5lLWhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRoZWlnaHRcbiAqL1xuLyoqXG4gKiBQb3ZpZGVzIHRyYW5zaXRpb24gcHJvcGVydHkgY29uZmlndXJlZCBieSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHByb3BzXG4gKiBAcGFyYW0ge051bWJlcn0gJGR1cmF0aW9uIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1kdXJhdGlvbl1cbiAqIEBwYXJhbSB7U3RyaW5nfSAkZWFzZSBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZWFzZV1cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCB2aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IGludmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBnbG9iYWwgY2xhc3MgbmFtZXMgd2l0aCBzcGFjaW5nIHByb3BlcnRpZXMgc2V0IGZyb20gJHNldHRpbmctc3BhY2luZyBtYXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gJG5hbWUgTWFpbiBzZWxlY3RvciBuYW1lLlxuICogQHBhcmFtIHtMaXN0fSAkc2lkZXMgW1tdXSBMaXN0IG9mIHNpZGVzIHRvIHNldCBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIFJldHVybnMgMCBvciB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFJldHVybnMgbnVsbCBvciB0aGUgbGFzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtaW4td2lkdGggc2V0IHRvICRtaW4gcGFyYW1ldGVyLlxuICogQHBhcmFtICRtaW4ge051bWJlcn0gWzBdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgYXMgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWluIFswXVxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWF4LXdpZHRoIHNldCB0byAkbWF4IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCB0byBwYXJhbWV0ZXJzIG9yXG4gKiB3aXRoIG1pbi13aWR0aCBxdWVyeSBpZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFJldHVybnMgY29sdW1uIHJhdGlvIGluIHJlbGF0aW9uIHRvIGNvbHVtbnMgY291bnQuXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtblxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5zIFskc2V0dGluZy1ncmlkLWNvbHVtbnNdXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbi8qKlxuICogQWRkcyBjbGVhcmluZyBmb3IgZWxlbWVudCB3aXRoIGZsb2F0ZWQgY2hpbGQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogQWRkcyBhIGJveC1zaGFkb3cgd2l0aCBiYXNpYyB2YWx1ZXMuXG4gKi9cbi8qKlxuICogQ2hlY2tzIHBhcmFtZXRlciBvbiBwcmVzZW5jZSBpbiB0aGUgYmxhY2tsaXN0IG9mIGltcG9ydHMgc2V0dGluZyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAka2V5d29yZHNcbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGlmICRrZXl3b3JkcyBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdC5cbiAqL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZW5hYmxlIG1heC1uZXN0aW5nLWRlcHRoICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtZWRpYS1xdWVyeS1saXN0LWNvbW1hLW5ld2xpbmUtYWZ0ZXIsbWVkaWEtcXVlcnktbGlzdC1jb21tYS1zcGFjZS1hZnRlciAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNpZGUgZHJhd2VyIGNvbnRleHQuXG4gKi9cbi5zdW1tYXJ5LW92ZXJ2aWV3X19ncmFuZC10b3RhbC1wcmljZSB7XG4gIGZvbnQtc2l6ZTogMS4xcmVtO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXVzZXItYWdlbnQtd2lkZ2V0LWNvbXBhbnktdXNlci1saXN0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktcGFnZS1idXNpbmVzcy11bml0LWNoYXJ0LWl0ZW0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlLXRhYmxlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3QtcGFja2FnaW5nLXVuaXQtd2lkZ2V0LXBhY2thZ2luZy11bml0LWNhcnQgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1zZWFyY2gtd2lkZ2V0LXByb2R1Y3QtcXVpY2stYWRkLWZvcm0gbWl4aW4gaW5zdGVhZC5cbiAqL1xuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGNvbG9yOiAjZmVjYzAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1zaG93KTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tLXNob3duOjphZnRlciB7XG4gIGNvbnRlbnQ6IGF0dHIoZGF0YS1oaWRlKTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24tY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIGZlLXNuaWZmZXI6ZGlzYWJsZWQgY29ycmVjdC1zY3NzLWNvbXBvbmVudC1zdHJ1Y3R1cmUgKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHNob3AtdWktcXVvdGUtc3RhdHVzLWNvbG9yIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRhYnMtd2lkZ2V0LXNlYXJjaC10YWJzIG1peGluIGluc3RlYWQuXG4gKi9cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpYyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLXRvcDogNHJlbTtcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY19fY29udGFpbmVyIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1hcmVhczogXCJwYXJ0LTEgZGVzY3JpcHRpb24tMVwiIFwicGFydC0yIGRlc2NyaXB0aW9uLTJcIiBcInBhcnQtMyBkZXNjcmlwdGlvbi0zXCIgXCJwYXJ0LTQgZGVzY3JpcHRpb24tNFwiIFwicGFydC01IGRlc2NyaXB0aW9uLTVcIiBcInBhcnQtNiBkZXNjcmlwdGlvbi02XCIgXCJwYXJ0LTcgZGVzY3JpcHRpb24tN1wiIFwicGFydC04IGRlc2NyaXB0aW9uLThcIjtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxMDAlIDUwJTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMXMgZWFzZS1vdXQ7XG4gIHRyYW5zaXRpb246IGFsbCAxcyBlYXNlLW91dDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLWV4cGxvc2lvbi1ncmFwaGljX19jb250YWluZXIge1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogNTAlIDUwJTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMjdyZW07XG4gIH1cbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY19fY29udGFpbmVyLnNob3dEZXRhaWxzIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLWV4cGxvc2lvbi1ncmFwaGljX19jb250YWluZXIuc2hvd0RldGFpbHMgLnBhcnQtZGVzY3JpcHRpb24ge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLWV4cGxvc2lvbi1ncmFwaGljX19jb250YWluZXIuc2hvd0RldGFpbHMge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY19faGVhZGxpbmUge1xuICAgIG1hcmdpbi1sZWZ0OiA1NSU7XG4gICAgbWFyZ2luLWJvdHRvbTogMnJlbTtcbiAgfVxufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLWV4cGxvc2lvbi1ncmFwaGljX19oZWFkbGluZSAuaGVhZGxpbmUge1xuICBmb250LXNpemU6IDEuNjY2NjY2NjY2N3JlbTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgY29sb3I6ICNmZmY7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNfX3Nob3ctZGV0YWlscy10cmlnZ2VyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMDtcbiAgdG9wOiAwO1xuICBoZWlnaHQ6IDNyZW07XG4gIHdpZHRoOiAzcmVtO1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgY29sb3I6ICMxYTE3MWI7XG4gIGJhY2tncm91bmQ6ICNmZWNjMDA7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNfX3Nob3ctZGV0YWlscy10cmlnZ2VyIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNfX3BhcnQtaW1hZ2Uge1xuICAtbXMtZmxleC1pdGVtLWFsaWduOiBjZW50ZXI7XG4gICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gIG1hcmdpbjogMXJlbSAxMCU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY19fcGFydC1pbWFnZSB7XG4gICAgcGFkZGluZzogMCAxcmVtO1xuICAgIG1hcmdpbjogMXJlbSAwO1xuICB9XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNfX3BhcnQtZGVzY3JpcHRpb24ge1xuICBmb250LXNpemU6IDAuOTMzMzMzMzMzM3JlbTtcbiAgY29sb3I6ICNmZmY7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY19fcGFydC1kZXNjcmlwdGlvbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICBjb2xvcjogIzRiNGI0ZDtcbiAgICBjb2xvcjogIzFhMTcxYjtcbiAgICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gICAgcGFkZGluZy1yaWdodDogMnJlbTtcbiAgfVxuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNfX3BhcnQtZGVzY3JpcHRpb24gc3ZnIHtcbiAgICBmaWxsOiAjNGI0YjRkO1xuICB9XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWMgLnBhcnQtZGVzY3JpcHRpb24ge1xuICBwYWRkaW5nOiAxcmVtIDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogbm9uZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLWV4cGxvc2lvbi1ncmFwaGljIC5wYXJ0LWRlc2NyaXB0aW9uIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWMgLnBhcnQtZGVzY3JpcHRpb246OmJlZm9yZSB7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDUwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVjYzAwO1xuICAgIGhlaWdodDogMC4xMzMzMzMzMzMzcmVtO1xuICAgIHRvcDogNTAlO1xuICAgIG1hcmdpbi1sZWZ0OiAtNTMlO1xuICAgIGxlZnQ6IDA7XG4gIH1cbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLWV4cGxvc2lvbi1ncmFwaGljIC5wYXJ0LWRlc2NyaXB0aW9uOjphZnRlciB7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaGVpZ2h0OiAwLjhyZW07XG4gICAgd2lkdGg6IDAuOHJlbTtcbiAgICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZWNjMDA7XG4gICAgdG9wOiA1MCU7XG4gICAgbWFyZ2luLWxlZnQ6IC01MyU7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMC4zMzMzMzMzMzMzcmVtLCAtMC4zMzMzMzMzMzMzcmVtKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0wLjMzMzMzMzMzMzNyZW0sIC0wLjMzMzMzMzMzMzNyZW0pO1xuICAgIGxlZnQ6IDA7XG4gIH1cbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY19fcGFydC0xLWltYWdlIHtcbiAgZ3JpZC1hcmVhOiBwYXJ0LTE7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNfX3BhcnQtMS1kZXNjcmlwdGlvbiB7XG4gIGdyaWQtYXJlYTogZGVzY3JpcHRpb24tMTtcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY19fcGFydC0yLWltYWdlIHtcbiAgZ3JpZC1hcmVhOiBwYXJ0LTI7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNfX3BhcnQtMi1kZXNjcmlwdGlvbiB7XG4gIGdyaWQtYXJlYTogZGVzY3JpcHRpb24tMjtcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY19fcGFydC0zLWltYWdlIHtcbiAgZ3JpZC1hcmVhOiBwYXJ0LTM7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNfX3BhcnQtMy1kZXNjcmlwdGlvbiB7XG4gIGdyaWQtYXJlYTogZGVzY3JpcHRpb24tMztcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY19fcGFydC00LWltYWdlIHtcbiAgZ3JpZC1hcmVhOiBwYXJ0LTQ7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNfX3BhcnQtNC1kZXNjcmlwdGlvbiB7XG4gIGdyaWQtYXJlYTogZGVzY3JpcHRpb24tNDtcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY19fcGFydC01LWltYWdlIHtcbiAgZ3JpZC1hcmVhOiBwYXJ0LTU7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNfX3BhcnQtNS1kZXNjcmlwdGlvbiB7XG4gIGdyaWQtYXJlYTogZGVzY3JpcHRpb24tNTtcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY19fcGFydC02LWltYWdlIHtcbiAgZ3JpZC1hcmVhOiBwYXJ0LTY7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNfX3BhcnQtNi1kZXNjcmlwdGlvbiB7XG4gIGdyaWQtYXJlYTogZGVzY3JpcHRpb24tNjtcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY19fcGFydC03LWltYWdlIHtcbiAgZ3JpZC1hcmVhOiBwYXJ0LTc7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNfX3BhcnQtNy1kZXNjcmlwdGlvbiB7XG4gIGdyaWQtYXJlYTogZGVzY3JpcHRpb24tNztcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY19fcGFydC04LWltYWdlIHtcbiAgZ3JpZC1hcmVhOiBwYXJ0LTg7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNfX3BhcnQtOC1kZXNjcmlwdGlvbiB7XG4gIGdyaWQtYXJlYTogZGVzY3JpcHRpb24tODtcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY19fcGFydC0xLWRlc2NyaXB0aW9uIHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDYuNjY2NjY2NjY2N3JlbTtcbiAgcGFkZGluZy10b3A6IDJyZW07XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNfX2N0YS1jb250YWluZXIge1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNi42NjY2NjY2NjY3cmVtO1xuICBwYWRkaW5nOiAzcmVtIDJyZW0gMnJlbTtcbiAgbWFyZ2luOiAwIDJyZW07XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGNvbG9yOiAjNGI0YjRkO1xufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLWV4cGxvc2lvbi1ncmFwaGljX19jdGEtY29udGFpbmVyIHN2ZyB7XG4gIGZpbGw6ICM0YjRiNGQ7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY19fY3RhLWNvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAwO1xuICAgIHdpZHRoOiA1MCU7XG4gICAgbWFyZ2luLWxlZnQ6IDUwJTtcbiAgICBwYWRkaW5nOiAxcmVtO1xuICB9XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNfX2N0YS1jb250YWluZXIgLmJ1dHRvbiB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNfX2N0YS1kZXNjcmlwdGlvbiB7XG4gICAgZm9udC1zaXplOiAwLjkzMzMzMzMzMzNyZW07XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG4gIC5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY19fY3RhLWRlc2NyaXB0aW9uOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgaGVpZ2h0OiAyMHJlbTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbWFyZ2luLXRvcDogLTIwcmVtO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAtMXJlbTtcbiAgICByaWdodDogLTFyZW07XG4gICAgei1pbmRleDogLTE7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICBjb2xvcjogIzRiNGI0ZDtcbiAgfVxuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNfX2N0YS1kZXNjcmlwdGlvbjo6YmVmb3JlIHN2ZyB7XG4gICAgZmlsbDogIzRiNGI0ZDtcbiAgfVxufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNzIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxMDtcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY3M6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHdpZHRoOiAyMDB2dztcbiAgaGVpZ2h0OiA5NSU7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgxNTBkZWcsICM0YjRiNGQsICMxYTE3MWIpO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVjbGFyYXRpb24tYmxvY2stbm8tZHVwbGljYXRlLXByb3BlcnRpZXMgKi9cbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiL2Fzc2V0cy9pbWFnZXMvZ3JhaW5fcGF0dGVybi5wbmdcIiksIGxpbmVhci1ncmFkaWVudCgxNTBkZWcsICM0YjRiNGQsICMxYTE3MWIpO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IC0xO1xuICBsZWZ0OiAtNTB2dztcbiAgdG9wOiAwO1xuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDVkZWcpO1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDVkZWcpO1xufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLWV4cGxvc2lvbi1ncmFwaGljc19faGVhZGxpbmUge1xuICBtYXJnaW4tdG9wOiAzcmVtO1xuICBwYWRkaW5nLXRvcDogMnJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLWV4cGxvc2lvbi1ncmFwaGljc19faGVhZGxpbmUge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY3NfX2hlYWRsaW5lIC5oZWFkbGluZSB7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGNvbG9yOiAjZmZmO1xufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLWV4cGxvc2lvbi1ncmFwaGljc19fY29udGFpbmVyIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1hcmVhczogXCJncmFwaGljLTFcIiBcImdyYXBoaWMtMlwiO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnByb2R1Y3QtbGFuZGluZy1wYWdlLWV4cGxvc2lvbi1ncmFwaGljc19fY29udGFpbmVyIHtcbiAgICBtYXJnaW4tdG9wOiAycmVtO1xuICAgIG1hcmdpbi1ib3R0b206IDRyZW07XG4gICAgZ3JpZC10ZW1wbGF0ZS1hcmVhczogXCJncmFwaGljLTEgZ3JhcGhpYy0yXCI7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTtcbiAgICBncmlkLWdhcDogMXJlbTtcbiAgfVxufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLWV4cGxvc2lvbi1ncmFwaGljc19fY29udGFpbmVyIC5ncmFwaGljLTEge1xuICBncmlkLWFyZWE6IGdyYXBoaWMtMTtcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY3NfX2NvbnRhaW5lciAuZ3JhcGhpYy0yIHtcbiAgZ3JpZC1hcmVhOiBncmFwaGljLTI7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNzX19jb250YWluZXIgLmdyYXBoaWMtMyB7XG4gIGdyaWQtYXJlYTogZ3JhcGhpYy0zO1xufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLWV4cGxvc2lvbi1ncmFwaGljc19fY29udGFpbmVyIC5ncmFwaGljLTQge1xuICBncmlkLWFyZWE6IGdyYXBoaWMtNDtcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY3NfX2NvbnRhaW5lciAuZ3JhcGhpYy01IHtcbiAgZ3JpZC1hcmVhOiBncmFwaGljLTU7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNzX19jb250YWluZXIgLmdyYXBoaWMtNiB7XG4gIGdyaWQtYXJlYTogZ3JhcGhpYy02O1xufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLWV4cGxvc2lvbi1ncmFwaGljc19fY29udGFpbmVyIC5ncmFwaGljLTcge1xuICBncmlkLWFyZWE6IGdyYXBoaWMtNztcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY3NfX2NvbnRhaW5lciAuZ3JhcGhpYy04IHtcbiAgZ3JpZC1hcmVhOiBncmFwaGljLTg7XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNzIC5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY19fcGFydC1pbWFnZSB7XG4gIG9wYWNpdHk6IDA7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDFzIGVhc2Utb3V0O1xuICB0cmFuc2l0aW9uOiBhbGwgMXMgZWFzZS1vdXQ7XG4gIG1hcmdpbi10b3A6IC0xMHJlbTtcbn1cbi5wcm9kdWN0LWxhbmRpbmctcGFnZS1leHBsb3Npb24tZ3JhcGhpY3MgLnByb2R1Y3QtbGFuZGluZy1wYWdlLWV4cGxvc2lvbi1ncmFwaGljX19wYXJ0LWRlc2NyaXB0aW9uIC5wYXJ0LWRlc2NyaXB0aW9uIHtcbiAgb3BhY2l0eTogMDtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMnMgZWFzZS1pbjtcbiAgdHJhbnNpdGlvbjogYWxsIDJzIGVhc2UtaW47XG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNzLmxvYWRlZCAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNfX3BhcnQtaW1hZ2Uge1xuICBvcGFjaXR5OiAxO1xuICBtYXJnaW4tdG9wOiAxcmVtO1xufVxuLnByb2R1Y3QtbGFuZGluZy1wYWdlLWV4cGxvc2lvbi1ncmFwaGljcy5sb2FkZWQgLnByb2R1Y3QtbGFuZGluZy1wYWdlLWV4cGxvc2lvbi1ncmFwaGljX19wYXJ0LWRlc2NyaXB0aW9uIHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNzLmxvYWRlZCAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtZXhwbG9zaW9uLWdyYXBoaWNfX3BhcnQtZGVzY3JpcHRpb24gLnBhcnQtZGVzY3JpcHRpb24ge1xuICBvcGFjaXR5OiAxO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4ucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VzIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC13cmFwOiB3cmFwO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLXdlYmtpdC1ib3gtcGFjazoganVzdGlmeTtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIG1hcmdpbjogNHJlbSAwO1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAucHJvZHVjdC1sYW5kaW5nLXBhZ2UtdXNlLWNhc2VzIHtcbiAgICBtYXJnaW46IDRyZW0gLTAuMjVyZW07XG4gIH1cbn0iLCJAY2hhcnNldCBcIlVURi04XCI7XG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBwcmltYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFsdGVybmF0aXZlIGNvbG9yIG9mIHRoZSBzaG9wIHRoZW1lLiBVc2FnZTogc2Vjb25kYXJ5IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIGFuZCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHdoaXRlIGNvbG9yLiBVc2FnZTogbm90IHRyYW5zcGFyZW50IGVsZW1lbnRzJyBiYWNrZ3JvdW5kIG9mIGRlZmF1bHQgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHQgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgbGlnaHRlciBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGxpZ2h0ZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgc2hhZGUgb2YgdGhlIGJsYWNrIGNvbG9yLiBVc2FnZTogYXMgYSBiYXNlIG9mIGJsYWNrIGNvbG9yIGZvciBzZW1pLXRyYW5zcGFyZW50IGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGFya2VyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBkYXJrZXN0IHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIHRleHQgY29sb3IgdmFyaWFudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgdHJhbnNwYXJlbnQgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIG1haW4gYmFja2dyb3VuZCBjb2xvci4gVXNhZ2U6IGJvZHkgYW5kIHNpZGUtZHJhd2VyIGJhY2tncm91bmQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0ZXh0LiBVc2FnZTogZGVmYXVsdCBnbG9iYWwgdGV4dCBjb2xvci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZ2xvYmFsIGJvcmRlciBjb2xvciBmb3IgdGhlIGlucHV0IGVsZW1lbnRzIG9uIGZvY3VzIGV2ZW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBzaGFkb3cgc2hhZGUgYW5kIHRyYW5zcGFyZW5jeSBmb3IgdGhlIHNoYWRvd2VkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IG92ZXJsYXkgY29sb3IuIFVzYWdlOiBlbGVtZW50cyB3aXRoIG92ZXJsYXkgLSBzaWRlLWRyYXdlciwgcG9wdXBzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBpbWFnZSBvdmVybGF5IGNvbG9yLiBVc2FnZTogaW1hZ2VzIHdpdGggb3ZlcmxheSAtIGxhenktaW1hZ2UuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhY3Rpb24gY29sb3JzIG1hcC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcuIFVzYWdlOiBib2R5IGdsb2JhbCBmb250IHN0eWxlcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGZvbnQgZmFtaWx5IHNldHRpbmcgZm9yIGNvZGUuIENhbiBiZSB1c2VkIGZvciBjb2RlIGFuZCBwcmUgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBiYXNpYyBmb250IHNpemUuIFVzYWdlOiBnbG9iYWwgYmFzaWMgZm9udCBzaXplLlxuICovXG4vKipcbiAqIEZvbnQgc2l6ZSB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBGb250IHdlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW4gdG8gc2V0IGZvbnQgd2VpZ2h0IHByb3BlcnR5LlxuICovXG4vKipcbiAqIEZvbnQgbGluZSBoZWlnaHQgdmFsdWVzIG1hcC4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgc3R5bGVzIGZvciBoZWFkaW5ncywgdGV4dCBlbGVtZW50cyBldGMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgZHVyYXRpb24gdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0aW9uIGVmZmVjdHMuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIGFuaW1hdGlvbiBwcm9wZXJ0aWVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZGVmYXVsdCB6LWluZGV4IHZhbHVlLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBhcmVhIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBoZWFkZXIgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzZWFyY2ggc3VnZ2VzdGlvbnMgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBhamF4IGxvYWRlci5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSB0b3AgbmF2aWdhdGlvbiBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgc3BhY2luZyB2YWx1ZXMgbWFwLiBVc2FnZTogc3BhY2luZyBoZWxwZXJzIGFuZCBtaXhpbnMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBicmVha3BvaW50cycgdmFsdWVzIGZvciByZXNwb25zaXZlLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBzeXN0ZW0gY29sdW1ucyBjb3VudC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGdyaWQgY29udGFpbmVyIG1heCB3aWR0aC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGd1dHRlcnMnIHNpemUgZm9yIGdyaWQgXCJ3aXRoLWd1dHRlclwiIG1vZGlmaWVyLlxuICovXG4vKipcbiAqIERlZmluZXMgaW1wb3J0IGJsYWNrbGlzdC4gVXNhZ2U6IGltcG9ydCBoZWxwZXIuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgbGlzdCBvZiBwcm9wZXJpZXMgZm9yIHJlc2V0IHVzYWdlLlxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBkYXJrZW4gc2FzcyBmdW5jdGlvbiB3aXRoIGEgZGVmYXVsdCBkZWdyZWUgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtDb2xvcn0gJHNldHRpbmctY29sb3JcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZGVncmVlIFsxMF1cbiAqL1xuLyoqXG4gKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciB0aGUgbGlnaHRlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFNldHMgZm9udC1zaXplIHByb3BlcnR5IGZyb20gZm9udCBzaXplIHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZCBtYXAga2V5LlxuICogQHBhcmFtIHtTdHJpbmcgfCBOdW1iZXJ9ICRzaXplXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXdlaWdodCBwcm9wZXJ0eSBmcm9tIGZvbnQgd2VpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtd2VpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gJHdlaWdodFxuICovXG4vKipcbiAqIFNldHMgbGluZS1oZWlnaHQgcHJvcGVydHkgZnJvbSBsaW5lLWhlaWdodCBzZXR0aW5ncyBtYXAgLSAkc2V0dGluZy1mb250LWxpbmUtaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJGhlaWdodFxuICovXG4vKipcbiAqIFBvdmlkZXMgdHJhbnNpdGlvbiBwcm9wZXJ0eSBjb25maWd1cmVkIGJ5IHRoZSBwYXNzZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkcHJvcHNcbiAqIEBwYXJhbSB7TnVtYmVyfSAkZHVyYXRpb24gWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWR1cmF0aW9uXVxuICogQHBhcmFtIHtTdHJpbmd9ICRlYXNlIFskc2V0dGluZy1lZmZlY3QtZGVmYXVsdC1lYXNlXVxuICovXG4vKipcbiAqIEZvcmNlcyBlbGVtZW50IHZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgaW52aXNpYmlsaXR5LlxuICovXG4vKipcbiAqIFByb3ZpZGVzIGdsb2JhbCBjbGFzcyBuYW1lcyB3aXRoIHNwYWNpbmcgcHJvcGVydGllcyBzZXQgZnJvbSAkc2V0dGluZy1zcGFjaW5nIG1hcC5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSBNYWluIHNlbGVjdG9yIG5hbWUuXG4gKiBAcGFyYW0ge0xpc3R9ICRzaWRlcyBbW11dIExpc3Qgb2Ygc2lkZXMgdG8gc2V0IHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogUmV0dXJucyAwIG9yIHRoZSBmaXJzdCB2YWx1ZSBmcm9tIHRoZSAkZWRnZXMgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGVkZ2VzIFskc2V0dGluZy1icmVha3BvaW50c10gTGlzdCBsZW5ndGggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMi5cbiAqIEByZXR1cm4ge0Jhc2V9XG4gKi9cbi8qKlxuICogUmV0dXJucyBudWxsIG9yIHRoZSBsYXN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1pbi13aWR0aCBzZXQgdG8gJG1pbiBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gJG1pbiB7TnVtYmVyfSBbMF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIGJyZWFrcG9pbnRzIHJhbmdlIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtaW4gWzBdXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBtYXgtd2lkdGggc2V0IHRvICRtYXggcGFyYW1ldGVyLlxuICogQHBhcmFtIHtOdW1iZXJ9ICRtYXggWyRzZXR0aW5nLWdyaWQtbWF4LXdpZHRoXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIHRvIHBhcmFtZXRlcnMgb3JcbiAqIHdpdGggbWluLXdpZHRoIHF1ZXJ5IGlmIG9ubHkgb25lIHBhcmFtZXRlciBpcyBwYXNzZWQuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogUmV0dXJucyBjb2x1bW4gcmF0aW8gaW4gcmVsYXRpb24gdG8gY29sdW1ucyBjb3VudC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1uXG4gKiBAcGFyYW0ge051bWJlcn0gJGNvbHVtbnMgWyRzZXR0aW5nLWdyaWQtY29sdW1uc11cbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuLyoqXG4gKiBBZGRzIGNsZWFyaW5nIGZvciBlbGVtZW50IHdpdGggZmxvYXRlZCBjaGlsZCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBBZGRzIGEgYm94LXNoYWRvdyB3aXRoIGJhc2ljIHZhbHVlcy5cbiAqL1xuLyoqXG4gKiBDaGVja3MgcGFyYW1ldGVyIG9uIHByZXNlbmNlIGluIHRoZSBibGFja2xpc3Qgb2YgaW1wb3J0cyBzZXR0aW5nIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRrZXl3b3Jkc1xuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgaWYgJGtleXdvcmRzIGlzIG5vdCBvbiB0aGUgYmxhY2tsaXN0LlxuICovXG4vKlxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qdXN0aW5za29sbmljay91bml0aXplXG4gICAgQ29weXJpZ2h0IMKpIDIwMTItMjAxMyBKdXN0aW4gU2tvbG5pY2tcblxuICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1lbmFibGUgbWF4LW5lc3RpbmctZGVwdGggKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtbmV3bGluZS1hZnRlcixtZWRpYS1xdWVyeS1saXN0LWNvbW1hLXNwYWNlLWFmdGVyICovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnQgKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgc2lkZSBkcmF3ZXIgY29udGV4dC5cbiAqL1xuLnN1bW1hcnktb3ZlcnZpZXdfX2dyYW5kLXRvdGFsLXByaWNlIHtcbiAgZm9udC1zaXplOiAxLjFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGNvbXBhbnktdXNlci1hZ2VudC13aWRnZXQtY29tcGFueS11c2VyLWxpc3QgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS1wYWdlLWJ1c2luZXNzLXVuaXQtY2hhcnQtaXRlbSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcmljZS1wcm9kdWN0LXZvbHVtZS13aWRnZXQtdm9sdW1lLXByaWNlIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UtdGFibGUgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJvZHVjdC1wYWNrYWdpbmctdW5pdC13aWRnZXQtcGFja2FnaW5nLXVuaXQtY2FydCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXNlYXJjaC13aWRnZXQtcHJvZHVjdC1xdWljay1hZGQtZm9ybSBtaXhpbiBpbnN0ZWFkLlxuICovXG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTtcbiAgY29sb3I6ICNmZWNjMDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLXNob3cpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi0tc2hvd246OmFmdGVyIHtcbiAgY29udGVudDogYXR0cihkYXRhLWhpZGUpO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbi1jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogZmUtc25pZmZlcjpkaXNhYmxlZCBjb3JyZWN0LXNjc3MtY29tcG9uZW50LXN0cnVjdHVyZSAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Ugc2hvcC11aS1xdW90ZS1zdGF0dXMtY29sb3IgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGFicy13aWRnZXQtc2VhcmNoLXRhYnMgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLnNlcnZpY2Utc2lkZWJhcnMge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDMzJTtcbiAgei1pbmRleDogNzAwO1xuICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAxcyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogYWxsIDFzIGVhc2UtaW4tb3V0O1xuICByaWdodDogLTAuOHJlbTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnNlcnZpY2Utc2lkZWJhcnMge1xuICAgIHRvcDogMjUlO1xuICAgIHJpZ2h0OiAtMjIuNTMzMzMzMzMzM3JlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAuc2VydmljZS1zaWRlYmFycy5zaG93IHtcbiAgICByaWdodDogLTAuOHJlbTtcbiAgfVxufVxuLnNlcnZpY2Utc2lkZWJhcnMuc2hvdyAuc2VydmljZS1zaWRlYmFyc19fbWFya2VyIHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAuc2VydmljZS1zaWRlYmFycy5zaG93IC5zZXJ2aWNlLXNpZGViYXJzX19tYXJrZXIge1xuICAgIG1hcmdpbi1yaWdodDogLTEuMzMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLnNlcnZpY2Utc2lkZWJhcnMuc2hvdyAuc2VydmljZS1zaWRlYmFyc19fbWFya2VyLWxhYmVsIHtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5zZXJ2aWNlLXNpZGViYXJzLnNob3cgLnNlcnZpY2Utc2lkZWJhcnNfX21hcmtlci1sYWJlbCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLnNlcnZpY2Utc2lkZWJhcnMuc2hvdyAuc2VydmljZS1zaWRlYmFyc19fbWFya2VyOmhvdmVyIC5zZXJ2aWNlLXNpZGViYXJzX19tYXJrZXItbGFiZWwsIC5zZXJ2aWNlLXNpZGViYXJzLnNob3cgLnNlcnZpY2Utc2lkZWJhcnNfX21hcmtlcjphY3RpdmUgLnNlcnZpY2Utc2lkZWJhcnNfX21hcmtlci1sYWJlbCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5zZXJ2aWNlLXNpZGViYXJzLnNob3cgLnNlcnZpY2Utc2lkZWJhcnNfX3NpZGViYXItY29udGVudCB7XG4gICAgbGVmdDogLTAuNDY2NjY2NjY2N3JlbTtcbiAgfVxufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA1NTBweCkge1xuICAuc2VydmljZS1zaWRlYmFycy5zaG93IC5zZXJ2aWNlLXNpZGViYXJzX190ZXh0IHtcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgIGxlZnQ6IC0xLjMzMzMzMzMzMzNyZW07XG4gIH1cbn1cbi5zZXJ2aWNlLXNpZGViYXJzX190ZXh0IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnNlcnZpY2Utc2lkZWJhcnNfX3RleHQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZzogMCAwLjg2NjY2NjY2NjdyZW07XG4gICAgbWluLXdpZHRoOiAyMnJlbTtcbiAgICBtYXgtd2lkdGg6IDIycmVtO1xuICB9XG4gIC5zZXJ2aWNlLXNpZGViYXJzX190ZXh0IC5oZWFkbGluZSB7XG4gICAgdGV4dC1zaGFkb3c6IC0xcHggMCAwICNmZmYsIDFweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMiksIDFweCAxcHggMCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMCAwICNmZmY7XG4gIH1cbn1cbi5zZXJ2aWNlLXNpZGViYXJzX19jb250YWluZXIge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5zZXJ2aWNlLXNpZGViYXJzX19jb250YWluZXItLXNob3ctbGFiZWwgLnNlcnZpY2Utc2lkZWJhcnNfX21hcmtlci1sYWJlbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5zZXJ2aWNlLXNpZGViYXJzX19zaWRlYmFyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnNlcnZpY2Utc2lkZWJhcnNfX3NpZGViYXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5zZXJ2aWNlLXNpZGViYXJzX19zaWRlYmFyLWNvbnRlbnQge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgY29sb3I6ICM0YjRiNGQ7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMzVweDtcbiAgICBib3JkZXItdG9wLXdpZHRoOiAxcHg7XG4gICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMXB4O1xuICAgIGJvcmRlci1sZWZ0LXdpZHRoOiAxcHg7XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItY29sb3I6ICNkMGQwZDA7XG4gICAgbWluLXdpZHRoOiAyMnJlbTtcbiAgICBtYXgtd2lkdGg6IDIycmVtO1xuICAgIHRvcDogMC44cmVtO1xuICAgIHotaW5kZXg6IDEwO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuICAuc2VydmljZS1zaWRlYmFyc19fc2lkZWJhci1jb250ZW50IHN2ZyB7XG4gICAgZmlsbDogIzRiNGI0ZDtcbiAgfVxufVxuLnNlcnZpY2Utc2lkZWJhcnNfX2Nsb3NlLWJ1dHRvbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5zZXJ2aWNlLXNpZGViYXJzX19jbG9zZS1idXR0b24ge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xuICAgICAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB3aWR0aDogMnJlbTtcbiAgICBoZWlnaHQ6IDJyZW07XG4gICAgZm9udC1zaXplOiAxLjMzMzMzMzMzMzNyZW07XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIHBhZGRpbmctcmlnaHQ6IDAuNXJlbTtcbiAgICBwYWRkaW5nLXRvcDogMC41cmVtO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogMC4yNXJlbTtcbiAgICB6LWluZGV4OiAxO1xuICB9XG4gIC5zZXJ2aWNlLXNpZGViYXJzX19jbG9zZS1idXR0b24gc3ZnIHtcbiAgICB3aWR0aDogMS4zMzMzMzMzMzMzcmVtO1xuICAgIGhlaWdodDogMS4zMzMzMzMzMzMzcmVtO1xuICB9XG59XG4uc2VydmljZS1zaWRlYmFyc19fbWFya2VyIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBtYXJnaW4tcmlnaHQ6IC0wLjMzMzMzMzMzMzNyZW07XG59XG4uc2VydmljZS1zaWRlYmFyc19fbWFya2VyLWljb24ge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHdpZHRoOiA1LjMzMzMzMzMzMzNyZW07XG4gIGhlaWdodDogNy4zMzMzMzMzMzMzcmVtO1xufVxuLnNlcnZpY2Utc2lkZWJhcnNfX21hcmtlci1pY29uIHN2ZyB7XG4gIGZpbGw6ICNmZWNjMDA7XG4gIHdpZHRoOiA2LjY2NjY2NjY2NjdyZW07XG4gIGhlaWdodDogNi42NjY2NjY2NjY3cmVtO1xuICBtaW4td2lkdGg6IHVuc2V0O1xufVxuLnNlcnZpY2Utc2lkZWJhcnNfX21hcmtlci1sYWJlbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDAuNHJlbTtcbiAgbGVmdDogMC44NjY2NjY2NjY3cmVtO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC05MGRlZyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTkwZGVnKTtcbiAgd2lkdGg6IDEwMCU7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MHB4KSB7XG4gIC5zZXJ2aWNlLXNpZGViYXJzX19tYXJrZXItbGFiZWwge1xuICAgIHRvcDogLTEwLjczMzMzMzMzMzNyZW07XG4gICAgbGVmdDogLTkuOTMzMzMzMzMzM3JlbTtcbiAgfVxufVxuLnNlcnZpY2Utc2lkZWJhcnNfX21hcmtlci10ZXh0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMzYsIDIzNiwgMjM2LCAwLjg1KTtcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxMHB4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDAgMC41cmVtIDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjY7XG59XG4uc2VydmljZS1zaWRlYmFyc19fbWFya2VyLXRleHQgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUwcHgpIHtcbiAgLnNlcnZpY2Utc2lkZWJhcnNfX21hcmtlci10ZXh0IHtcbiAgICBsaW5lLWhlaWdodDogMS45O1xuICB9XG59XG4uc2VydmljZS1zaWRlYmFyc19fbWFya2VyOmhvdmVyIC5zZXJ2aWNlLXNpZGViYXJzX19tYXJrZXItbGFiZWwsIC5zZXJ2aWNlLXNpZGViYXJzX19tYXJrZXI6YWN0aXZlIC5zZXJ2aWNlLXNpZGViYXJzX19tYXJrZXItbGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi5pcy1sb2NrZWQgLnNlcnZpY2Utc2lkZWJhcnMge1xuICBkaXNwbGF5OiBub25lO1xufSIsIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBjb2xvciBvZiB0aGUgc2hvcCB0aGVtZS4gVXNhZ2U6IHByaW1hcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYWx0ZXJuYXRpdmUgY29sb3Igb2YgdGhlIHNob3AgdGhlbWUuIFVzYWdlOiBzZWNvbmRhcnkgZWxlbWVudHMnIGJhY2tncm91bmQgYW5kIGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgd2hpdGUgY29sb3IuIFVzYWdlOiBub3QgdHJhbnNwYXJlbnQgZWxlbWVudHMnIGJhY2tncm91bmQgb2YgZGVmYXVsdCBiYWNrZ3JvdW5kLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodCBzaGFkZSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXJzIGFuZCB0ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBsaWdodGVyIHNoYWRlIGNvbG9yLiBVc2FnZTogZWxlbWVudHMnIGJhY2tncm91bmQsIGJvcmRlcnMgYW5kIHRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbGlnaHRlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgYmFja2dyb3VuZCwgYm9yZGVycyBhbmQgdGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBzaGFkZSBvZiB0aGUgYmxhY2sgY29sb3IuIFVzYWdlOiBhcyBhIGJhc2Ugb2YgYmxhY2sgY29sb3IgZm9yIHNlbWktdHJhbnNwYXJlbnQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRhcmsgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkYXJrZXIgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgdGhlIGRhcmtlc3Qgc2hhZGUgY29sb3IuIFVzYWdlOiBlbGVtZW50cycgdGV4dCBjb2xvciB2YXJpYW50LlxuICovXG4vKipcbiAqIERlZmluZXMgYSB0cmFuc3BhcmVudCBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzJyBiYWNrZ3JvdW5kLCBib3JkZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgbWFpbiBiYWNrZ3JvdW5kIGNvbG9yLiBVc2FnZTogYm9keSBhbmQgc2lkZS1kcmF3ZXIgYmFja2dyb3VuZC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoZSBtYWluIGNvbG9yIG9mIHRleHQuIFVzYWdlOiBkZWZhdWx0IGdsb2JhbCB0ZXh0IGNvbG9yLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGdsb2JhbCBib3JkZXIgY29sb3IgZm9yIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBnbG9iYWwgYm9yZGVyIGNvbG9yIGZvciB0aGUgaW5wdXQgZWxlbWVudHMgb24gZm9jdXMgZXZlbnQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIHNoYWRvdyBzaGFkZSBhbmQgdHJhbnNwYXJlbmN5IGZvciB0aGUgc2hhZG93ZWQgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBhIGRlZmF1bHQgb3ZlcmxheSBjb2xvci4gVXNhZ2U6IGVsZW1lbnRzIHdpdGggb3ZlcmxheSAtIHNpZGUtZHJhd2VyLCBwb3B1cHMgZXRjLlxuICovXG4vKipcbiAqIERlZmluZXMgYSBkZWZhdWx0IGltYWdlIG92ZXJsYXkgY29sb3IuIFVzYWdlOiBpbWFnZXMgd2l0aCBvdmVybGF5IC0gbGF6eS1pbWFnZS5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGFjdGlvbiBjb2xvcnMgbWFwLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZy4gVXNhZ2U6IGJvZHkgZ2xvYmFsIGZvbnQgc3R5bGVzLlxuICovXG4vKipcbiAqIERlZmluZXMgZm9udCBmYW1pbHkgc2V0dGluZyBmb3IgY29kZS4gQ2FuIGJlIHVzZWQgZm9yIGNvZGUgYW5kIHByZSBlbGVtZW50cy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJhc2ljIGZvbnQgc2l6ZS4gVXNhZ2U6IGdsb2JhbCBiYXNpYyBmb250IHNpemUuXG4gKi9cbi8qKlxuICogRm9udCBzaXplIHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbnMgcHJvdmlkaW5nIHN0eWxlcyBmb3IgaGVhZGluZ3MsIHRleHQgZWxlbWVudHMgZXRjLlxuICovXG4vKipcbiAqIEZvbnQgd2VpZ2h0IHZhbHVlcyBtYXAuIFVzYWdlOiBtaXhpbiB0byBzZXQgZm9udCB3ZWlnaHQgcHJvcGVydHkuXG4gKi9cbi8qKlxuICogRm9udCBsaW5lIGhlaWdodCB2YWx1ZXMgbWFwLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBzdHlsZXMgZm9yIGhlYWRpbmdzLCB0ZXh0IGVsZW1lbnRzIGV0Yy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCBkdXJhdGlvbiB2YWx1ZSBmb3IgdGhlIGFuaW1hdGlvbiBlZmZlY3RzLiBVc2FnZTogbWl4aW5zIHByb3ZpZGluZyBhbmltYXRpb24gcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGEgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRpb24gZWZmZWN0cy4gVXNhZ2U6IG1peGlucyBwcm92aWRpbmcgYW5pbWF0aW9uIHByb3BlcnRpZXMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBkZWZhdWx0IHotaW5kZXggdmFsdWUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbi8qKlxuICogRGVmaW5lcyB6LWluZGV4IHZhbHVlIGZvciB0aGUgbm90aWZpY2F0aW9uIGFyZWEgY29udGV4dC5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGhlYWRlciBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHNlYXJjaCBzdWdnZXN0aW9ucyBjb250ZXh0LlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIGFqYXggbG9hZGVyLlxuICovXG4vKipcbiAqIERlZmluZXMgei1pbmRleCB2YWx1ZSBmb3IgdGhlIHRvcCBuYXZpZ2F0aW9uIGNvbnRleHQuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBzcGFjaW5nIHZhbHVlcyBtYXAuIFVzYWdlOiBzcGFjaW5nIGhlbHBlcnMgYW5kIG1peGlucy5cbiAqL1xuLyoqXG4gKiBEZWZpbmVzIGJyZWFrcG9pbnRzJyB2YWx1ZXMgZm9yIHJlc3BvbnNpdmUuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBncmlkIHN5c3RlbSBjb2x1bW5zIGNvdW50LlxuICovXG4vKipcbiAqIERlZmluZXMgZ3JpZCBjb250YWluZXIgbWF4IHdpZHRoLlxuICovXG4vKipcbiAqIERlZmluZXMgZ3V0dGVycycgc2l6ZSBmb3IgZ3JpZCBcIndpdGgtZ3V0dGVyXCIgbW9kaWZpZXIuXG4gKi9cbi8qKlxuICogRGVmaW5lcyBpbXBvcnQgYmxhY2tsaXN0LiBVc2FnZTogaW1wb3J0IGhlbHBlci5cbiAqL1xuLyoqXG4gKiBQcm92aWRlcyBsaXN0IG9mIHByb3BlcmllcyBmb3IgcmVzZXQgdXNhZ2UuXG4gKi9cbi8qKlxuICogV3JhcHBlciBmdW5jdGlvbiBmb3IgdGhlIGRhcmtlbiBzYXNzIGZ1bmN0aW9uIHdpdGggYSBkZWZhdWx0IGRlZ3JlZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0NvbG9yfSAkc2V0dGluZy1jb2xvclxuICogQHBhcmFtIHtOdW1iZXJ9ICRkZWdyZWUgWzEwXVxuICovXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIHRoZSBsaWdodGVuIHNhc3MgZnVuY3Rpb24gd2l0aCBhIGRlZmF1bHQgZGVncmVlIHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7Q29sb3J9ICRzZXR0aW5nLWNvbG9yXG4gKiBAcGFyYW0ge051bWJlcn0gJGRlZ3JlZSBbMTBdXG4gKi9cbi8qKlxuICogU2V0cyBmb250LXNpemUgcHJvcGVydHkgZnJvbSBmb250IHNpemUgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC1zaXplIGFjY29yZGluZyB0byB0aGUgcGFzc2VkIG1hcCBrZXkuXG4gKiBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHNpemVcbiAqL1xuLyoqXG4gKiBTZXRzIGZvbnQtd2VpZ2h0IHByb3BlcnR5IGZyb20gZm9udCB3ZWlnaHQgc2V0dGluZ3MgbWFwIC0gJHNldHRpbmctZm9udC13ZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nfSAkd2VpZ2h0XG4gKi9cbi8qKlxuICogU2V0cyBsaW5lLWhlaWdodCBwcm9wZXJ0eSBmcm9tIGxpbmUtaGVpZ2h0IHNldHRpbmdzIG1hcCAtICRzZXR0aW5nLWZvbnQtbGluZS1oZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQgbWFwIGtleS5cbiAqIEBwYXJhbSB7U3RyaW5nIHwgTnVtYmVyfSAkaGVpZ2h0XG4gKi9cbi8qKlxuICogUG92aWRlcyB0cmFuc2l0aW9uIHByb3BlcnR5IGNvbmZpZ3VyZWQgYnkgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9ICRwcm9wc1xuICogQHBhcmFtIHtOdW1iZXJ9ICRkdXJhdGlvbiBbJHNldHRpbmctZWZmZWN0LWRlZmF1bHQtZHVyYXRpb25dXG4gKiBAcGFyYW0ge1N0cmluZ30gJGVhc2UgWyRzZXR0aW5nLWVmZmVjdC1kZWZhdWx0LWVhc2VdXG4gKi9cbi8qKlxuICogRm9yY2VzIGVsZW1lbnQgdmlzaWJpbGl0eS5cbiAqL1xuLyoqXG4gKiBGb3JjZXMgZWxlbWVudCBpbnZpc2liaWxpdHkuXG4gKi9cbi8qKlxuICogUHJvdmlkZXMgZ2xvYmFsIGNsYXNzIG5hbWVzIHdpdGggc3BhY2luZyBwcm9wZXJ0aWVzIHNldCBmcm9tICRzZXR0aW5nLXNwYWNpbmcgbWFwLlxuICogQHBhcmFtIHtTdHJpbmd9ICRuYW1lIE1haW4gc2VsZWN0b3IgbmFtZS5cbiAqIEBwYXJhbSB7TGlzdH0gJHNpZGVzIFtbXV0gTGlzdCBvZiBzaWRlcyB0byBzZXQgcHJvcGVydGllcy5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIDAgb3IgdGhlIGZpcnN0IHZhbHVlIGZyb20gdGhlICRlZGdlcyBsaXN0LlxuICogQHBhcmFtIHtMaXN0fSAkZWRnZXMgWyRzZXR0aW5nLWJyZWFrcG9pbnRzXSBMaXN0IGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyLlxuICogQHJldHVybiB7QmFzZX1cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIG51bGwgb3IgdGhlIGxhc3QgdmFsdWUgZnJvbSB0aGUgJGVkZ2VzIGxpc3QuXG4gKiBAcGFyYW0ge0xpc3R9ICRlZGdlcyBbJHNldHRpbmctYnJlYWtwb2ludHNdIExpc3QgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIuXG4gKiBAcmV0dXJuIHtCYXNlfVxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggbWluLXdpZHRoIHNldCB0byAkbWluIHBhcmFtZXRlci5cbiAqIEBwYXJhbSAkbWluIHtOdW1iZXJ9IFswXVxuICogQGNvbnRlbnQgRXh0ZW5kcyBtaXhpbiB3aXRoIHByb3BlcnRpZXMgZm9yIG1lZGlhIHF1ZXJ5LlxuICovXG4vKipcbiAqIFNldHMgc2NyZWVuIG1lZGlhIHF1ZXJ5IHdpdGggYnJlYWtwb2ludHMgcmFuZ2UgcGFzc2VkIGFzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1pbiBbMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBTZXRzIHNjcmVlbiBtZWRpYSBxdWVyeSB3aXRoIG1heC13aWR0aCBzZXQgdG8gJG1heCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge051bWJlcn0gJG1heCBbJHNldHRpbmctZ3JpZC1tYXgtd2lkdGhdXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBmb3IgbWVkaWEgcXVlcnkuXG4gKi9cbi8qKlxuICogU2V0cyBzY3JlZW4gbWVkaWEgcXVlcnkgd2l0aCBicmVha3BvaW50cyByYW5nZSBwYXNzZWQgdG8gcGFyYW1ldGVycyBvclxuICogd2l0aCBtaW4td2lkdGggcXVlcnkgaWYgb25seSBvbmUgcGFyYW1ldGVyIGlzIHBhc3NlZC5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkbWF4IFskc2V0dGluZy1ncmlkLW1heC13aWR0aF1cbiAqIEBjb250ZW50IEV4dGVuZHMgbWl4aW4gd2l0aCBwcm9wZXJ0aWVzIGZvciBtZWRpYSBxdWVyeS5cbiAqL1xuLyoqXG4gKiBSZXR1cm5zIGNvbHVtbiByYXRpbyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIGNvdW50LlxuICogQHBhcmFtIHtOdW1iZXJ9ICRjb2x1bW5cbiAqIEBwYXJhbSB7TnVtYmVyfSAkY29sdW1ucyBbJHNldHRpbmctZ3JpZC1jb2x1bW5zXVxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG4vKipcbiAqIEFkZHMgY2xlYXJpbmcgZm9yIGVsZW1lbnQgd2l0aCBmbG9hdGVkIGNoaWxkIGVsZW1lbnRzLlxuICovXG4vKipcbiAqIEFkZHMgYSBib3gtc2hhZG93IHdpdGggYmFzaWMgdmFsdWVzLlxuICovXG4vKipcbiAqIENoZWNrcyBwYXJhbWV0ZXIgb24gcHJlc2VuY2UgaW4gdGhlIGJsYWNrbGlzdCBvZiBpbXBvcnRzIHNldHRpbmcgbGlzdC5cbiAqIEBwYXJhbSB7TGlzdH0gJGtleXdvcmRzXG4gKiBAY29udGVudCBFeHRlbmRzIG1peGluIHdpdGggcHJvcGVydGllcyBpZiAka2V5d29yZHMgaXMgbm90IG9uIHRoZSBibGFja2xpc3QuXG4gKi9cbi8qXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RpbnNrb2xuaWNrL3VuaXRpemVcbiAgICBDb3B5cmlnaHQgwqkgMjAxMi0yMDEzIEp1c3RpbiBTa29sbmlja1xuXG4gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4qL1xuLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vanVzdGluc2tvbG5pY2svdW5pdGl6ZVxuICAgIENvcHlyaWdodCDCqSAyMDEyLTIwMTMgSnVzdGluIFNrb2xuaWNrXG5cbiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWVuYWJsZSBtYXgtbmVzdGluZy1kZXB0aCAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgbWVkaWEtcXVlcnktbGlzdC1jb21tYS1uZXdsaW5lLWFmdGVyLG1lZGlhLXF1ZXJ5LWxpc3QtY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLyoqXG4gKiBEZWZpbmVzIHotaW5kZXggdmFsdWUgZm9yIHRoZSBzaWRlIGRyYXdlciBjb250ZXh0LlxuICovXG4uc3VtbWFyeS1vdmVydmlld19fZ3JhbmQtdG90YWwtcHJpY2Uge1xuICBmb250LXNpemU6IDEuMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgY29tcGFueS11c2VyLWFnZW50LXdpZGdldC1jb21wYW55LXVzZXItbGlzdCBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBjb21wYW55LXBhZ2UtYnVzaW5lc3MtdW5pdC1jaGFydC1pdGVtIG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByaWNlLXByb2R1Y3Qtdm9sdW1lLXdpZGdldC12b2x1bWUtcHJpY2UgbWl4aW4gaW5zdGVhZC5cbiAqL1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcHJpY2UtcHJvZHVjdC12b2x1bWUtd2lkZ2V0LXZvbHVtZS1wcmljZS10YWJsZSBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm9kdWN0LXBhY2thZ2luZy11bml0LXdpZGdldC1wYWNrYWdpbmctdW5pdC1jYXJ0IG1peGluIGluc3RlYWQuXG4gKi9cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHByb2R1Y3Qtc2VhcmNoLXdpZGdldC1wcm9kdWN0LXF1aWNrLWFkZC1mb3JtIG1peGluIGluc3RlYWQuXG4gKi9cbi5jb2xsYXBzaWJsZS1saXN0X19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApO1xuICBjb2xvcjogI2ZlY2MwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLmNvbGxhcHNpYmxlLWxpc3RfX2J1dHRvbjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtc2hvdyk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLS1zaG93bjo6YWZ0ZXIge1xuICBjb250ZW50OiBhdHRyKGRhdGEtaGlkZSk7XG59XG4uY29sbGFwc2libGUtbGlzdF9fYnV0dG9uLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBmZS1zbmlmZmVyOmRpc2FibGVkIGNvcnJlY3Qtc2Nzcy1jb21wb25lbnQtc3RydWN0dXJlICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaG9wLXVpLXF1b3RlLXN0YXR1cy1jb2xvciBtaXhpbiBpbnN0ZWFkLlxuICovXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB0YWJzLXdpZGdldC1zZWFyY2gtdGFicyBtaXhpbiBpbnN0ZWFkLlxuICovXG4udGFicy1lbGVtZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLnRhYnMtZWxlbWVudF9fbmF2IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLXdlYmtpdC1ib3gtcGFjazogc3RhcnQ7XG4gICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdy15OiBoaWRkZW47XG4gIG92ZXJmbG93LXg6IGF1dG87XG59XG4udGFicy1lbGVtZW50X19uYXYtaXRlbSB7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDEwcHg7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxMHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBwYWRkaW5nOiAxLjMzMzMzMzMzMzNyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB3aWR0aDogLXdlYmtpdC1maXQtY29udGVudDtcbiAgd2lkdGg6IC1tb3otZml0LWNvbnRlbnQ7XG4gIHdpZHRoOiBmaXQtY29udGVudDtcbiAgb3BhY2l0eTogMC41O1xufVxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnRhYnMtZWxlbWVudF9fbmF2LWl0ZW0ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbi50YWJzLWVsZW1lbnRfX25hdi1pdGVtIC50YWJzLWVsZW1lbnRfX2xpbmsge1xuICBjb2xvcjogIzRiNGI0ZDtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1uZXN0aW5nLWRlcHRoICovXG59XG4udGFicy1lbGVtZW50X19uYXYtaXRlbSAudGFicy1lbGVtZW50X19saW5rOmhvdmVyIHtcbiAgY29sb3I6ICM0YjRiNGQ7XG59XG4udGFicy1lbGVtZW50X19uYXYtaXRlbS5hY3RpdmUge1xuICBvcGFjaXR5OiAxO1xuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LW5lc3RpbmctZGVwdGggKi9cbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC50YWJzLWVsZW1lbnRfX25hdi1pdGVtLmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbiAgICBjb2xvcjogIzRiNGI0ZDtcbiAgfVxuICAudGFicy1lbGVtZW50X19uYXYtaXRlbS5hY3RpdmUgc3ZnIHtcbiAgICBmaWxsOiAjNGI0YjRkO1xuICB9XG59XG4udGFicy1lbGVtZW50X19jb250ZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjZWNlYztcbiAgY29sb3I6ICM0YjRiNGQ7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIG1pbi1oZWlnaHQ6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDEuNnJlbTtcbn1cbi50YWJzLWVsZW1lbnRfX2NvbnRlbnQgc3ZnIHtcbiAgZmlsbDogIzRiNGI0ZDtcbn1cbi50YWJzLWVsZW1lbnRfX2NvbnRlbnQgPiAudGFicy1lbGVtZW50X19jb250ZW50LWJvZHkge1xuICBkaXNwbGF5OiBub25lO1xufVxuLnRhYnMtZWxlbWVudF9fY29udGVudC5hY3RpdmUge1xuICBkaXNwbGF5OiBibG9jaztcbn0iXSwic291cmNlUm9vdCI6IiJ9*/